js过滤树形结构数据并获取新的树形结构

本文介绍了如何使用JavaScript处理树形结构数据,特别是如何根据特定条件过滤数据并保持原有的层级结构。核心是递归遍历和构建新树形结构。示例代码展示了如何过滤出id为特定值的节点,并提供了处理children为空情况的方法。通过将过滤条件抽象为独立函数,使过滤过程更加灵活和可复用。
摘要由CSDN通过智能技术生成

       工作中不时会遇见对树形结构数据的处理,有时候只需要遍历并获取其中一个属性值就行了(这部分内容请参考笔者的另一篇博客JS遍历树形结构方法),有时候我们则需要根据某些条件去过滤并得到新的树形结构数据。

let nodeList = [
    {id: '1-1', children: [{id: '1-2-1'}, {id: '1-2-2'}]},
    {id: '2-1'},
    {id: '3-1', children: [{id: '3-2-1', children: [{id: '3-3-1'}]}]}
]

       例如现在我们需要过滤出id为 1-1, 1-2-2, 3-1的数据,并维持原先的层级结构。核心有两点,第一点就是如何递归遍历,第二点就是如何组织新的树形结构,并在后续的遍历中将他传递下去,这里主要是通过参数的引用传递实现的。具体实现如下:

function filterTree (tree = [], map = [], arr = []) {
    if (!tree.length) return []
        for (let item of tree) {
            if (!map.includes(item.id)) continue
            let node = {...item, children: []}
            arr.push(node)
        
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值