【问题标题】:Deleting JS Object Properties a few levels deep将 JS 对象属性删除几级
【发布时间】:2011-06-30 21:42:38
【问题描述】:

我有一个这样的对象:

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'

如果有道理的话……

【问题讨论】:

    标签: javascript json javascript-objects


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      相关资源
      最近更新 更多