我有这样的对象:
var myObj = {
first: {
sub: {
prop1: "some text",
prop2: "some more text"
},
sub2: {
prop1: "Something",
prop2: "Something2",
}
},
second: {
stuff: "More stuff...lots of stuff"
}
}
我试图通过使用另一个对象作为选择器来移除该对象的属性。例如:
var delSeletor = {
first: {
sub: {
prop2: ""
}
}
}
所以 delete(delSelector, myObject)
应该返回:
var myObj = {
first: {
sub: {
prop1: "some text",
},
sub2: {
prop1: "Something",
prop2: "Something2",
}
},
second: {
stuff: "More stuff...lots of stuff"
}
}
请注意,我不是在寻找使用“.dot”选择器的解决方案,例如:delete('first.sub.prop2', myObj)
,如 thread 所示.
最佳答案
您可以迭代对象 selector
以删除和检查键
- 如果key不存在,返回
- 如果选择器对象的属性是一个对象,则使用该键再次调用删除函数
deleteKeys
。否则从源对象中删除 key 。
function deleteKeys(object, selector) {
Object.keys(selector).forEach(function (k) {
if(!(k in object)) {
return;
}
if (typeof selector[k] === 'object') {
deleteKeys(object[k], selector[k]);
} else {
delete object[k];
}
});
}
var myObj = { first: { sub: { prop1: "some text", prop2: "some more text" }, sub2: { prop1: "Something", prop2: "Something2", } }, second: { stuff: "More stuff...lots of stuff" } },
delSeletor = { first: { sub: { prop2: "" } } };
deleteKeys(myObj, delSeletor);
console.log(myObj);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于JavaScript 通过使用另一个对象作为选择器来深度删除对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44306791/