我有这段代码从对象中删除元素:
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()
并使用相同的对象键的情况下解决此问题?最好没有图书馆。提前谢谢。
答案 0 :(得分:3)
查看预期结果,而不是将数据完全克隆两次并在之后删除属性,您只能将属性添加到所需对象:
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)
检查道具 - Set has是否属于p
。如果是,则此代码段会返回obj2
,否则会返回obj1
在该结果对象上,属性索引[p]
用于设置值。例如,对于fname
,obj2
将从上面的部分返回,从而产生obj2[p] = ...
最后一部分data[p]
只是为了在p
对象上获取属性data
的值。
答案 1 :(得分:1)
这是演示,
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);
Object.keys(data).forEach(val => {
/*console.log('??', val)*/
if (['fname', 'age'].indexOf(val) > -1) {
delete obj1[val];
}
else {
delete obj2[val];
}
});
console.log('result1', obj1);
console.log('result2', obj2);
答案 2 :(得分:1)
您可以考虑创建没有这些属性的新对象,并保持原始状态。
function omit(names, obj) {
var result = {};
for (var prop in obj) {
if (names.indexOf(prop) == -1) {
result[prop] = obj[prop];
}
}
return result;
}
and use it like
const data = { "fname": "xyz", "lname": "abc", "age": 23, "level_year": 555, "qty_min": 1, "qty_med": 2 };
const withoutProps = omit(['fname', 'age'], data)