javascript - 深度删除 JS 对象属性

标签 javascript json javascript-objects

我有一个这样的对象:

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/

相关文章:

javascript - 在 javascript 中获取特定 DOM 元素组的内容列表的最佳方法是什么?

javascript - ExtJs,防止图像在 Ext.Img 中拉伸(stretch)

javascript - map 的返回值未定义

PHP 索引数组到关联 JSON

android - 在 Android 上从任何容器(如 List)创建 GSON

javascript - 将变量内容分配给对象属性名称

javascript - typescript - 无法访问 Array.some 中的 "this"

php - 带有 ajax 请求的 Highcharts

javascript - 属于数组中同一字段的值的累积和

javascript - 如何在一个循环中组合/合并/相交两个对象数组?