js 树形数组对象只保留某些属性

86 阅读1分钟
const tree = [
 {
    id: 1,
    name: "node1",
    value: 10,
    children: [
      { id: 2, name: "node2", value: 20 },
      { id: 3, name: "node3", value: 30 },
    ],
  },
];
function filterTree(tree, keys) {
  return tree.map(({ children, ...rest }) => ({
    ...keys.reduce((acc, key) => ({ ...acc, [key]: rest[key] }), {}),
    ...(children && { children: filterTree(children, keys) }),
  }));
}
const newTree = filterTree(tree, ["id", "name"]);
console.log(newTree); // [{ id: 1, name: "node1", children: [{ id: 2, name: "node2" }, { id: 3, name: "node3" }] }]