繁体   English   中英

删除几个级别的JS对象属性

[英]Deleting JS Object Properties a few levels deep

我有一个像这样的对象:

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'

如果这是有道理的......

它不漂亮,但你可以使用这样的东西:

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或其他)将取决于你如何使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM