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

Sim*_*old 2 javascript jquery json object

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

Json对象

{
  "foo": {
     "1" : {
        "bar" : "a",
        "foo" : {
          "2" : "aa"
        }
      },
     "3" : {
        "bar" : "b",
        "foo" : {
          "4" : "bb"
        }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

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

ade*_*neo 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小提琴


And*_*ark 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;
}
Run Code Online (Sandbox Code Playgroud)