如何在不丢失javascript结构的情况下过滤嵌套树对象?

如何在不丢失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

要在React中正确显示树视图,我需要过滤嵌套的树对象

我发现这篇帖子:

但实际上我想做的恰恰相反。 例如,如果在我的filterData函数中
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
          }
        ]
      }
    ]
  }
];