我的数据结构如下:
obj = {
_id: "sjkd9skj",
data: {
dektop: [
{
x: 2,
y: 3,
t: { key: 'aabbcc'}
},
...
],
mobile: [
{
x: 4,
y: 3,
t: { key: 'ffff'}
},
...
],
print: [
{
x: 7,
y: 5,
t: { key: 'ppp'}
},
...
]
}
}
在数据中,我需要删除所有模式(t
,desktop
,mobile
)的所有数组元素中的所有print
个键。
最有效的方法是什么?这些模式阵列可能变得非常大。
我试过这样的话:
obj.data.mobile.forEach((item)=>{
delete item.t;
});
obj.data.desktop.forEach((item)=>{
delete item.t;
});
obj.data.print.forEach((item)=>{
delete item.t;
});
在这种情况下实际上没有操纵obj
,所以它不起作用。还有更好的建议吗?
答案 0 :(得分:1)
我希望它不会被打开,但你可以尝试reduce
aproach。不可变性要求得以实现。
let obj = {_id:"sjkd9skj",data:{dektop:[{x:2,y:3,t:{key:'aabbcc'}},{x:2,y:3,t:{key:'aabbcc'}}],mobile:[{x:4,y:3,t:{key:'ffff'}},],print:[{x:7,y:5,t:{key:'ppp'}},]}};
const { _id } = obj;
let newObj = Object.keys(obj.data).reduce((s, a) => {
obj.data[a].forEach((_, i) => {
if (obj.data[a][i].t) {
delete obj.data[a][i].t;
}
})
s.data[a] = obj.data[a];
return s;
}, { _id, data: {} });
console.log(newObj);

答案 1 :(得分:1)
不确定我是否在这里提供帮助,但将数据(没有t
属性)复制到新对象似乎比delete
方法更快: https://jsperf.com/removing-object-props
编辑:我编辑了测试用例来修复Kind用户的代码。复制仍然更快。
答案 2 :(得分:0)
您可以使用array#forEach
删除t
密钥。
var obj = {
_id: "sjkd9skj",
data: {
dektop: [
{
x: 2,
y: 3,
t: { key: 'aabbcc'}
}
],
mobile: [
{
x: 4,
y: 3,
t: { key: 'ffff'}
}
],
print: [
{
x: 7,
y: 5,
t: { key: 'ppp'}
}
]
}
}
Object.keys(obj.data).forEach(o => {
obj.data[o].forEach(p => delete p['t'])
});
console.log(obj);

答案 3 :(得分:0)
未被操纵,因为您正在从对象
删除输出对象而非对象
obj = {
_id: "sjkd9skj",
data: {
dektop: [{
x: 2,
y: 3,
t: {
key: 'aabbcc'
}
},
],
mobile: [{
x: 4,
y: 3,
t: {
key: 'ffff'
}
},
],
print: [{
x: 7,
y: 5,
t: {
key: 'ppp'
}
},
]
}
}
Object.keys(obj.data).forEach((item) => {
delete obj.data[item][0].t;
});
console.log(obj.data)