如果我不知道它的深度,我如何删除另一个对象内的对象?
Json对象
{
"foo": {
"1" : {
"bar" : "a",
"foo" : {
"2" : "aa"
}
},
"3" : {
"bar" : "b",
"foo" : {
"4" : "bb"
}
}
}
}
假设我想删除“4”,但“4”可能是第一级孩子还是在另一个孩子中?
答案 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);
}
}
}
答案 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;
}