js 数组递归过滤算法问题
//源数据
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 就必须保证对应的父节点完整,
递归层级不固定! 可能存在多级的情况!
求一个高效的算法!请教各位大佬!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
再高效的算法反正至少遍历一次,所以递归解决就好了。
写个比较通用的,传入一个函数func用于描述你需要保留的节点,看看够不够简单:
测试:
输出:
试试这个