Bla*_*OST 5 javascript recursion object
我有这样的对象:
var myObj = {
first: {
sub: {
prop1: "some text",
prop2: "some more text"
},
sub2: {
prop1: "Something",
prop2: "Something2",
}
},
second: {
stuff: "More stuff...lots of stuff"
}
}
Run Code Online (Sandbox Code Playgroud)
我试图通过使用另一个对象作为选择器来从此对象中删除属性。例如:
var delSeletor = {
first: {
sub: {
prop2: ""
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以delete( delSelector, myObject)应该返回:
var myObj = {
first: {
sub: {
prop1: "some text",
},
sub2: {
prop1: "Something",
prop2: "Something2",
}
},
second: {
stuff: "More stuff...lots of stuff"
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我不是在寻找使用“.dot”选择器的解决方案,例如:delete('first.sub.prop2', myObj)如本线程所示。
selector您可以迭代要删除和检查的键的对象
deleteKeys使用该键再次调用删除函数。否则从源对象中删除键。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);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |