如何在不丢失javascript结构的情况下过滤嵌套树对象?
要在React中正确显示树视图,我需要过滤嵌套的树对象 我发现这篇帖子: 但实际上我想做的恰恰相反。 例如,如果在我的filterData函数中如何在不丢失javascript结构的情况下过滤嵌套树对象?,javascript,json,recursion,tree,Javascript,Json,Recursion,Tree,要在React中正确显示树视图,我需要过滤嵌套的树对象 我发现这篇帖子: 但实际上我想做的恰恰相反。 例如,如果在我的filterData函数中name==“a3”,我想用name==“a3” 您可以创建新对象,而无需改变给定数据并减少数组 函数过滤器(数组、名称){ 返回数组.reduce((r,{children=[],…o})=>{ 如果(o.name==名称){ r、 推(o); 返回r; } children=过滤器(children,name); if(儿童长度){ r、 pus
name==“a3
”,我想用name==“a3”
您可以创建新对象,而无需改变给定数据并减少数组
函数过滤器(数组、名称){
返回数组.reduce((r,{children=[],…o})=>{
如果(o.name==名称){
r、 推(o);
返回r;
}
children=过滤器(children,name);
if(儿童长度){
r、 push(Object.assign(o,{children}));
}
返回r;
}, []);
}
变量项=[{name:“a1”,id:1,子项:[{name:“a2”,id:2,子项:[{name:“a3”,id:3},{name:“a5”,id:4}]},{name:“b2”,id:2,子项:[{{name:“a2”,id:2,子项:[{{name:“a3”,id:3}},{name:“a4”,id:8}];
控制台日志(过滤器(项目“a2”);
控制台日志(过滤器(项目“a3”)代码>
.as console wrapper{max height:100%!important;top:0;}
我刚刚改进了Nina的建议,以便在不包括“name”的情况下删除底层
函数过滤器(数组、名称){
返回数组.reduce((r,o)=>{
儿童;
children=过滤器(o.children | |[],名称);
if(儿童长度){
r、 push(Object.assign({},o,{children}));
}
如果(o.name==名称){
r、 推(o);
if(o.children&&o.children.name!==name){
r[0]。子项=[];
}
}
返回r;
}, []);
}
变量项=[{name:“a1”,id:1,子项:[{name:“a2”,id:2,子项:[{name:“a3”,id:3},{name:“a5”,id:4}]},{name:“b2”,id:2,子项:[{{name:“a2”,id:2,子项:[{{name:“a3”,id:3}]},{name:“a4”,id:8}]},,
结果=过滤器(项目“a2”);
控制台日志(结果)代码>尼娜,你又一次救了我!它工作得很好,现在我必须再读一遍,以确保理解你的建议!非常感谢。实际上,非常感谢,例如,对于result=filter(items,“a2”)
它似乎不起作用,下面的级别不会删除。我已尝试改进您的代码,但尚未找到解决方案…:(如果我们使用与上面相同的items对象,我的结果应该是:javascript const result=[{name:“a1”,id:1,子对象:[{name:“a2”,id:2,}]},{name:“b2”,id:2,子对象:[{name:“a2”,id:2,}]}]
我知道了,没有找到节点的子节点,请参见编辑。
const result = filterData(items, "a3")
const items = [
{
name: "a1",
id: 1,
children: [
{
name: "a2",
id: 2,
children: [
{
name: "a3",
id: 3
},
{
name: "a5",
id: 4
}
]
}
]
},
{
name: "b2",
id: 2,
children: [
{
name: "a2",
id: 2,
children: [
{
name: "a3",
id: 3
}
]
},
{
name: "a4",
id: 8
}
]
}
];
const result = [
{
name: "a1",
id: 1,
children: [
{
name: "a2",
id: 2,
children: [
{
name: "a3",
id: 3
}
]
}
]
},
{
name: "b2",
id: 2,
children: [
{
name: "a2",
id: 2,
children: [
{
name: "a3",
id: 3
}
]
}
]
}
];