收藏
回答

请问这个筛选怎么做?

请先考虑一下这个问题。
let results = {
    "data":[{
        "name":"name1",
        "type":"t1"
    },{
        "name":"name2",
        "type":"t2",
        "children":[{
            "name":"name3",
            "type":"t3"
        },{
            "name":"name4",
            "type":"t1",
            "children":[{
                "name":"n6",
                "type":"t2"
            }]
        }]
    },{
        "name":"name5",
        "type":"t3"
    }]
}
//经过函数fun1的处理,过滤掉所有type=t1的节点及其子节点。
let filted = fun1(results)
console.log(`${JSON.stringify(filted, null, 2)}`)
/** expected results:
{
    "data":[{
        "name":"name2",
        "type":"t2",
        "children":[{
            "name":"name3",
            "type":"t3"
        }]
    },{
        "name":"name5",
        "type":"t3"
    }]
}
*/
请实现fun1。
回答关注问题邀请回答
收藏

1 个回答

  • Leo
    Leo
    2022-11-30
      <script>
    
    
        let results = {
          "data": [{
            "name": "name1",
            "type": "t1"
          },
          {
            "name": "name2",
            "type": "t2",
            "children": [
              {
                "name": "name3",
                "type": "t3"
              },
              {
                "name": "name4",
                "type": "t1",
                "children": [{
                  "name": "n6",
                  "type": "t2"
                }]
              }]
          },
          {
            "name": "name5",
            "type": "t3"
          }]
        }
    
    
        let result = filterTree(results.data)
        console.log(result)
    
    
        function filterTree(tree, arr = []) {
          if (!tree.length) return []
          for (let item of tree) {
            // 循环数组,然后过滤数据
            // 如果该条数据type不为0时,跳出本次循环
            if (item.type == 't1') continue
            // 如果满足条件时,用新node代替,然后把children清空
            let node = item.children ? { ...item, children: [] } : { ...item }
            // 然后添加到新数组中
            arr.push(node)
            // 如果有子节点,调用递归函数,并把空数组传给下一个函数
            // 利用引用数据类型的特性,实现浅拷贝
            // 递归函数过滤时会改变这个空数组数据,从而实现层级结构过滤
            if (item.children && item.children.length) {
              filterTree(item.children, node.children)
            }
          }
          return arr
        }
      </script>
    
    2022-11-30
    有用
    回复
登录 后发表内容