题目:实现一个对树型结构进行过滤的函数,其中树形结构的格式

题目:实现一个对树型结构进行过滤的函数,其中树形结构的格式如下: tree = [ {name: ‘A’}, {name: ‘B’,
children: [ {name: ‘A’}, {name: ‘AA’, children: […]} ]}, {name: ‘C’}
]

  1. 假设我输入的 str 为 A 则过滤后返回的结果为 [ {name: ‘A’}, {name: ‘B’, children: [ {name: ‘A’} ]} ]

  2. 假设我输入的 str 为 AA 则过滤后返回的结果为 [ {name: ‘B’, children: [ {name: ‘AA’, children: […]} ]} ]

  3. 假设我输入的 str 为 B 则过滤后返回的结果为 [ {name: ‘B’, children: [ {name: ‘A’}, {name: ‘AA’, children: […]} ]} ]
    // 实现该函数,要求不允许对原有的tree做任何修改,最终返回结果是一棵新结构出来的树 function filter (tree, str) {

    }

const tree = [
  { name: "A" },
  { name: "B", children: [{ name: "A" }] },
  {
    name: "AA",
    children: [
      { name: "BB" },
      { name: "C" },
      { name: "D", children: [{ name: "A" }] },
      { name: "A" },
    ],
  },
  { name: "D", children: [{ name: "C", children: [{ name: "AA" }] }] },
];
function clear(tree, str) {
  if (!tree) return [];//处理叶节点
  let result = [];
  
  tree.map((item) => {
    let it = { ...item }; //每项浅拷贝一下保证不影响原来的tree
    if (it.name === str) {
      result.push(it);
    } else {
      let obj = clear(it.children, str);
      //得到children的返回的result数组,放到拷贝对象的children中
      if (obj.length > 0) {
        it.children = obj;
        result.push(it);
      }
    }
  });
  return result;//每层返回一个数组
}
console.log(clear(tree, "A"));
console.log(tree);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章