递归——扁平化数据转化成树形数据

把扁平化的数组数据, 转换成树形结构的数组数据

(无论多少层, 都能解决) --- 递归

function arrayToTree(arr, rootNode) {
    const tree = []
    arr.forEach(item => {
      if (item.pid === rootNode) {
      // 找到根节点之后, 就去找下面有没有对应的子节点
      const children = arrayToTree(arr, item.id)
        // 如果 children 的长度大于0, 说明找到了子节点
        children.length > 0 ? (item.children = children) : 0
        tree.push(item) // 将内容加入数组中
      }
    })
    return tree
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设现有一个扁平化数据结构,其中每个节点包含id、parentId和name三个属性,表示该节点的唯一标识、父节点的唯一标识和节点名称。现在需要将这个扁平化数据结构转换成树形数据结构。 可以使用递归方法来实现。具体步骤如下: 1. 定义一个递归函数,参数为当前节点的id和整个扁平化数据结构。 2. 在递归函数中,遍历整个扁平化数据结构,查找所有父节点为当前节点id的节点,并将这些节点作为当前节点的子节点。 3. 对于每个子节点,递归调用该函数,参数为子节点的id和整个扁平化数据结构。 4. 递归函数返回当前节点及其所有子节点构成的树形数据结构。 代码实现如下: ``` function flattenToTree(id, data) { var tree = {id: id, name: '', children: []}; for (var i = 0; i < data.length; i++) { if (data[i].parentId == id) { var child = {id: data[i].id, name: data[i].name, children: []}; tree.children.push(child); var subChildren = flattenToTree(data[i].id, data); if (subChildren.children.length > 0) { child.children = subChildren.children; } } } return tree; } ``` 调用该函数的示例代码如下: ``` var data = [ {id: 1, parentId: 0, name: 'A'}, {id: 2, parentId: 1, name: 'B'}, {id: 3, parentId: 1, name: 'C'}, {id: 4, parentId: 2, name: 'D'}, {id: 5, parentId: 2, name: 'E'}, {id: 6, parentId: 3, name: 'F'} ]; var tree = flattenToTree(1, data); console.log(tree); ``` 输出结果为: ``` { id: 1, name: '', children: [ { id: 2, name: 'B', children: [ {id: 4, name: 'D', children: []}, {id: 5, name: 'E', children: []} ] }, { id: 3, name: 'C', children: [ {id: 6, name: 'F', children: []} ] } ] } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值