我有这段代码可以从对象中删除元素:
const data = {
"fname": "xyz",
"lname": "abc",
"age": 23,
"level_year": 555,
"qty_min": 1,
"qty_med": 2
};
['fname', 'age'].forEach(val => {
console.log('??', val)
delete data[val];
});
console.log('result', data);
输出:
[object Object] {
level_year: 555,
lname: "abc",
qty_med: 2,
qty_min: 1
}
我实际上想通过使用相同的 key
删除所有元素,所以我这样做了:
const data = {
"fname": "xyz",
"lname": "abc",
"age": 23,
"level_year": 555,
"qty_min": 1,
"qty_med": 2
};
const obj1 = Object.assign({}, data);
const obj2 = Object.assign({}, data);
['fname', 'age'].forEach(val => {
console.log('??', val)
delete obj1[val];
delete obj2[!val];
});
console.log('result1', obj1);
console.log('result2', obj2);
更新:我添加了 delete obj2[!val]
因为我期望 obj2
只保留 fname
和 age
元素。显然我错了。 obj2
的预期输出:
[object Object] {
"fname": "xyz",
"age": 23,
}
obj1
确实删除了元素,但 obj2
没有。如何在不使用多个 forEach()
并使用相同的对象键的情况下解决这个问题?最好不要图书馆。提前致谢。
最佳答案
看到预期的结果,而不是完全克隆数据两次然后删除属性,您可以只将属性添加到想要的对象:
const data = {
"fname": "xyz",
"lname": "abc",
"age": 23,
"level_year": 555,
"qty_min": 1,
"qty_med": 2
};
const obj1 ={},obj2 ={}, props = new Set(['fname', 'age']);
Object.keys(data).forEach(p=> (props.has(p) ? obj2 : obj1)[p] = data[p]);
console.log('result1', obj1);
console.log('result2', obj2);
编辑
关于行 (props.has(p) ? obj2 : obj1)[p] = data[p]
:
第一部分 (props.has(p) ? obj2 : obj1)
检查 props- Set has名为 p
的属性。如果是,此代码段返回 obj2
,否则返回 obj1
在生成的对象上,属性索引 [p]
用于设置值。例如,对于 fname
,obj2
将从上面的部分返回,导致 obj2[p] = ...
最后一部分 data[p]
只是获取 data
对象的属性 p
的值。
关于javascript - 使用 forEach() 删除对象元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46617769/