删除另一个对象内的对象而不知道其深度

时间:2013-08-23 19:45:04

标签: javascript jquery json object

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

Json对象

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

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

2 个答案:

答案 0 :(得分: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);
        }
    }
}

FIDDLE

答案 1 :(得分:5)

这是另一个递归解决方案,我的版本和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;
}