博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js 一维数组,转成嵌套数组
阅读量:5108 次
发布时间:2019-06-13

本文共 1602 字,大约阅读时间需要 5 分钟。

// 情况一:
// 数据源 var egs = [            {name_1: 'name_1...'},            {name_2: 'name_4...'},            {name_3: 'name_3...'},            {name_0: 'name_0...'},        ].reverse() // 最终想要的数据形式        // {name_1: 'name_1...',        //     children: [        //         {name_2: 'name_2...',        //             children: [        //                 {name_3: 'name_3...'},        //             ]        //         }        //     ]        // }        var result = {}        var key ='children'        s(egs)        function s(arrs) {            arrs.forEach((o, i) => {                console.log('---'+ i + ': ', result)                if (!result[key]) {                    result[key] = [o]                } else {                    o[key] = [result]                    result = o                }             })        }        console.log(result)
// 情况二: // pId 对应父级 id
let arr = [
    { pId: '-1', id: '0', name: '父级1' },
    { pId: '0', id: '1', name: '父级1-1' },
    { pId: '0', id: '2', name: '父级1-2' },
    { pId: '2', id: '21', name: '子级21' },
  ]
  function buildTree (arr) {
    let temp = {}
    let tree = {}
    // 数组转 键值对
    arr.forEach(item => {
      temp[item.id] = item
    })
    let tempKeys = Object.keys(temp)
    tempKeys.forEach(key => {
      // 获取当前项
      let item = temp[key]
      // 当前项 pId
      let _itemPId = item.pId
      // 获取父级项
      let parentItemByPid = temp[_itemPId]
      if (parentItemByPid) {
        if (!parentItemByPid.children) {
          parentItemByPid.children = []
        }
        parentItemByPid.children.push(item)
      } else {
        tree[item.id] = item
      }
    })
    // 对象转数组并返回
    return Object.keys(tree).map(key => tree[key])
  }
 
 

 

转载于:https://www.cnblogs.com/gavin007/p/8340200.html

你可能感兴趣的文章
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
C#综合揭秘——细说多线程(下)
查看>>
c#运算符 ?
查看>>
【题解】青蛙的约会
查看>>
求给定字符串的最长子字符串
查看>>
.26-浅析webpack源码之事件流make(1)
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
【转】 FPGA设计的四种常用思想与技巧
查看>>
C++:同名隐藏和赋值兼容规则
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>
新手算法学习之路----二叉树(在一个二叉查找树中插入一个节点)
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
基于C#编程语言的Mysql常用操作
查看>>
【转】Java反射 之 反射基础
查看>>
mysql数据库备份和还原的常用命令
查看>>