//源数据
let data = [{
province: '浙江',
children: [{
name: '杭州',
children: [{
name: '下城区',
children: [{
name: '下城街道',
id: '1_1_1',
}]
}, {
name: '上城区',
id: '1_2',
}]
}, {
name: '宁波',
id: '2',
}, {
name: '温州',
id: '3',
}]
},
{
province: '广东',
children: [{
name: '广州',
children: [{
name: '越秀区',
id: '4_1',
}, {
name: '荔湾区',
id: '4_2',
}]
}]
},
]
//过滤条件数组
let filterList = ['1_1_1', '2', '4_1'];
// 需要考虑 数组节点id不在源数据的情况
//例如
let filterList = ['666', '777'];
//最终结果
[{
province: '浙江',
children: [{
name: '杭州',
children: [{
name: '下城区',
children: [{
name: '下城街道',
id: '1_1_1',
}]
}]
}, {
name: '宁波',
id: '2',
}]
},
{
province: '广东',
children: [{
name: '广州',
children: [{
name: '越秀区',
id: '4_1',
}]
}]
},
]
数据如上 我想在源数据中获取 id 在过滤数组 filterList中的数据,
如果子节点在filterList 就必须保证对应的父节点完整,
递归层级不固定! 可能存在多级的情况!
求一个高效的算法!请教各位大佬!
再高效的算法反正至少遍历一次,所以递归解决就好了。
写个比较通用的,传入一个函数func用于描述你需要保留的节点,看看够不够简单:
测试:
输出: