我有一个这样的对象:
var myObj = {
first: {
sub: {
level: "some text",
level2: "some more text"
},
sub2: {
level3: "Something"
}
},
second: {
stuff: "More stuff...lots of stuff"
}
}
我想做的就是说
delete myObj.first.sub.level
但我不知道传递的是什么,或者我需要深入多少层才能删除正确的属性,这意味着它可能只是:
Storage.removeItem('myObj.first'); // This is currently working
或者更复杂的东西:
Storage.removeItem('myObj.first.sub2.level3'); // This doesn't work because I'm more than 1 level into the object.
我有点卡住了,因为我可以到达我拥有 key “level3”及其属性“Something”的地步,但我无法弄清楚如何正确后退以删除该对象的完整部分。
我需要复制它在 myObj 中的位置,以便我可以删除完整传递的对象。
'myObj.first.sub.level3'
如果这有道理......
最佳答案
它不是很漂亮,但你可以使用这样的东西:
function deepDelete(target, context) {
// Assume global scope if none provided.
context = context || window;
var targets = target.split('.');
if (targets.length > 1)
deepDelete(targets.slice(1).join('.'), context[targets[0]]);
else
delete context[target];
}
deepDelete('first.sub.level3', myObj);
deepDelete('myObj.first.sub2.level3');
修改它以在下降之前测试 typeof context[targets[0]] !== 'undefined'
可能是个好主意。您对此的具体 react (返回 false、抛出或其他任何内容)取决于您如何使用它。
关于javascript - 深度删除 JS 对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5059951/