Javascript 嵌套数目未知的数组中对象的递归筛选
最近很抱歉,如果是重复某人的问题。然而,我找不到解决问题的办法 我有:Javascript 嵌套数目未知的数组中对象的递归筛选,javascript,Javascript,最近很抱歉,如果是重复某人的问题。然而,我找不到解决问题的办法 我有: 来自id的数组 2:嵌套级别未知的复杂对象: { "item": [ { "item": [ { "item": [ {
{
"item": [
{
"item": [
{
"item": [
{
"item": [
{
id: 1,
name: "potato"
}
]
},
{
"item": [
{
id: 2,
name: "tomato"
}
]
}
]
},
{
"item": [
{
"item": [
{
id: 3,
name: "apple"
}
]
},
{
"item": [
{
id: 4,
name: "pineapple"
}
]
},
{
id: 5,
name: "carrot"
},
]
},
{
id: 6,
name: "onion"
}
]
}
]
}
如何递归过滤普通对象而不破坏它的结构?如果
项
数组中的对象成为筛选对象,则项
数组应为空。您可以定义一个函数,如果对象的id匹配,或者如果其中一个子项匹配,则返回一个新对象,或者使用一个表示“忽略此对象”的符号(未定义或null也可以):
“item”是一个非常奇怪的对象数组名称。而且它非常通用。无法完全理解它是什么意思
/*请检查id是否有效*/
。这意味着它应该检查id是否是id
数组中的一个?是的,如果问题显示出很小的努力,我通常会从答案中省略一些小部分:)嗯,似乎它不起作用,或者可能我遗漏了一些东西是的,您的对象结构不太一致,很多对象没有.item
属性。这是一种非常酷的方法。我不明白省略是怎么起作用的,但它起作用了。非常感谢
{
"item": [
{
"item": [
{
"item": [
{
"item": [
{
id: 1,
name: "potato"
}
]
},
{
"item": [
{
id: 2,
name: "tomato"
}
]
}
]
},
{
"item": [
{
"item": [
{
id: 3,
name: "apple"
}
]
},
{
"item": [
{
id: 4,
name: "pineapple"
}
]
},
{
id: 5,
name: "carrot"
},
]
},
{
id: 6,
name: "onion"
}
]
}
]
}
const omit = Symbol();
function filter(obj, ids) {
const item = obj.item
.map(it => filter(it, ids))
.filter(it => it !== omit);
if(item.length || /* check if id is valid */) {
return { ...obj, item };
} else {
return omit;
}
}