请先考虑一下这个问题。
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。
<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>