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

标签 javascript json recursion tree

为了在 React 中正确显示 TreeView ,我需要过滤一个嵌套的树对象。

我找到这篇文章: filter nested tree object without losing structure

但实际上我想做的恰恰相反。 例如,如果在我的 filterData 函数 name === "a3"中,我想使用 name === "a3"

保留对象
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
          }
        ]
      }
    ]
  }
];

最佳答案

您可以在不改变给定数据和减少数组的情况下创建新对象。

function filter(array, name) {
    return array.reduce((r, { children = [], ...o }) => {
        if (o.name === name) {
            r.push(o);
            return r;
        }
        children = filter(children, name);
        if (children.length) {
            r.push(Object.assign(o, { children }));
        }
        return r;
    }, []);
}    

var 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 }] }];

console.log(filter(items, "a2"));
console.log(filter(items, "a3"));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何在不丢失 javascript 结构的情况下过滤嵌套树对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57218449/

相关文章:

c# - 围绕着 N 个父-> 子关联

javascript - Firebase 身份验证错误身份验证/网络请求失败

javascript - Qunit 测试在页面刷新时在通过和失败之间交替

javascript - 使用nodejs eexpress接收带列表的json

javascript - 如何在 for 循环中访问 json 数组的字段名称?

ruby-on-rails - 堆栈级别太深,即使递归调用在函数末尾?

javascript - 为每个图像缩略图预览添加删除按钮

javascript - Cocoa - 防止在 WebKit 中缓存 Javascript - Safari Beta 4 错误?

java - Quick-Json 反序列化转换问题

scala - scala中的递归非常有必要吗?