2

如果我不知道它的深度,如何移除另一个对象内的对象?

json对象

{
  "foo": {
     "1" : {
        "bar" : "a",
        "foo" : {
          "2" : "aa"
        }
      },
     "3" : {
        "bar" : "b",
        "foo" : {
          "4" : "bb"
        }
      }
   }
}

假设我想删除“4”,但“4”可能是第一级孩子还是在另一个孩子里面?

4

2 回答 2

6

这是另一种递归解决方案,我的版本和 adeneo 的不同之处在于,一旦找到匹配的密钥,我的版本就会停止。如果您知道不会多次出现相同的键,或者您可以每次调用只删除每个出现的一个,这会更有效:

function remove(obj, key) {
    for (var k in obj) {
        if (k == key) {
            delete obj[key];
            return true;
        } else if (typeof obj[k] === "object") {
            if (remove(obj[k], key)) return true;
        }
    }
    return false;
}
于 2013-08-23T19:56:17.007 回答
5

迭代是关键:

function remove(obj, key) {
    for (k in obj) {
        if (k==key) {
            delete obj[k];
        }else if (typeof obj[k] === 'object') {
            remove(obj[k], key);
        }
    }
}

小提琴

于 2013-08-23T19:51:31.713 回答