{
"1": {
"0": [
7606,
7615,
7596,
7513,
7514,
7597,
7605,
7607,
7608,
7595
],
"87": [
7514,
7605,
7644,
7607,
7608
]
},
"2": {
"0": [
7573,
7605,
7572,
7569
]
},
"3": { ....
}

我有以下演示Json数组。注意 - 1
或2
...
我需要删除包含在给定数组[7605,7608,7615,7573]
中匹配的任何值的数组元素的值。我需要从上面的json数组中删除所有这些值。
如何递归遍历以下数组并从对象的叶子数组中删除所有这些值。
对于上述输入,输出应为
{
"1": {
"0": [
7606,
7596,
7513,
7514,
7597,
7607,
7595
],
"87": [
7514,
7644,
7607
]
},
"2": {
"0": [
7568,
7572,
7569
]
}
}
我尝试使用Object.keys,但我对json的动态特性感到困惑。
答案 0 :(得分:2)
正确地指出Object.keys()
有助于为这样的动态对象实现解决方案,但这是正确的,但这是一种可能的递归实现,使用Object.entries()
代替:
function filterObject(o, v) {
return Object
.entries(o).map(([key, value]) => {
if (Array.isArray(value)) {
value = value.filter(n => !v.includes(n))
} else {
value = filterObject(value, v)
}
return [key, value]
})
.reduce((o, [key, value]) => {
return Object.assign(o, {
[key]: value
})
}, {})
}
console.log(filterObject({
"1": {
"0": [
7606,
7615,
7596,
7513,
7514,
7597,
7605,
7607,
7608,
7595
],
"87": [
7514,
7605,
7644,
7607,
7608
]
},
"2": {
"0": [
7573,
7605,
7572,
7569
]
}
}, [7605, 7608, 7615, 7573]))
MDN用于各种功能的polyfills:
答案 1 :(得分:1)
您可以使用filter
方法接受回调功能并结合Object.keys
方法。
forEach()
方法为每个数组元素执行一次提供的函数。
indexOf()
用于返回在数组中可以找到给定元素的第一个索引,如果不存在则返回-1。
filter
方法会创建一个 new 数组,其中包含通过提供的函数实施的测试的所有元素。
forEach
用于迭代对象键,然后使用filter
方法从数组中移除项目(这些项目也存在于给定数组中) [7605,7608,7615,7573]
)。
此外,您可以使用includes
方法检查给定数组中是否存在项目。
json[key][subkey]=json[key][subkey].filter(function(item){
return !array.includes(item);
});
let array=[7605,7608,7615,7573];
let json={
"1": {
"0": [
7606,
7615,
7596,
7513,
7514,
7597,
7605,
7607,
7608,
7595
],
"87": [
7514,
7605,
7644,
7607,
7608
]
},
"2": {
"0": [
7573,
7605,
7572,
7569
]
}
}
Object.keys(json).forEach(function(key){
Object.keys(json[key]).forEach(function(subkey){
json[key][subkey]=json[key][subkey].filter(function(item){
return array.indexOf(item)==-1;
});
});
});
console.log(json);