我有一个这样的对象:
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.
我有点卡住了,因为我可以达到我的关键“level3”和它的属性“Something”的程度,但是我无法弄清楚如何正确地退步以便删除该对象的完整部分。
我需要复制它在myObj中的位置,这样我就可以删除完整的传递对象。
'myObj.first.sub.level3'
如果这是有道理的......
答案 0 :(得分:8)
它不漂亮,但你可以使用这样的东西:
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'
可能是个好主意。你对此的反应如何(返回false,throw或其他)将取决于你如何使用它。