doubleyong
管理员
管理员
  • 最后登录2026-05-10
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:5901回复:0

[js]js 中实现将数组的顺序数据,转成对象的树型结构

楼主#
更多 发布于:2018-10-11 10:52
给出的数据如下:
var abc = [
        {id:1, pid:0, name:'沃尔玛'},
        {id:2, pid:1, name:'生鲜区'},
        {id:3, pid:1, name:'日用品区'},
        {id:4, pid:2, name:'鱼'},
        {id:5, pid:2, name:'牛肉'},
        {id:6, pid:3, name:'卫生纸'},
        {id:7, pid:3, name:'牙刷'},
        {id:8, pid:7, name:'电动牙刷'},
        {id:9, pid:7, name:'普通牙刷'}
    ]

请写一个方法,将上面给的数据转成下面要求输出模式,输出数据。

最后要求的输出格式,如下:
{id:1, pid:0, name:'沃尔玛', childrens:[
      {id:2, pid:1, name:'生鲜区', childrens:[
        {id:4, pid:2, name:'鱼'},
        {id:5, pid:2, name:'牛肉'}
      ]},
      {id:3, pid:1, name:'日用品区',childrens:[
          {id:6, pid:3, name:'卫生纸'},
          {id:7, pid:3, name:'牙刷'}
        ]}
    ]}
欢迎大家一起来讨论,看看那种方法最有效。
先自己思考下,下面分享下,我的解决方法。
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
先自己思考下
哈哈,思考的也差不多了。下面就献丑分享下,我自己的一个解题思路:
核心思想:就是使用了Map来存储不同的id,对应的所在的内存地址,根据对应pid的值,找到你要加入到对象对应的位置。
楼主的一些愚见,欢迎大家分享自己的实现方法。一起探讨下。
function mind4(){
        var map = new Map(); //存在id,对应所在的内存地址
        var outputObj,pid,paddress ;
        for(var i = 0; i<abc.length;i++){
            pid = abc[i].pid;
            if(map.has(pid)){
                //存在,将些信息,加入到对应id=pid的对象上的children
                if (!map.get(pid).childrens)
                    map.get(pid).childrens = [];
                var obj = new Object(abc[i]);
                map.get(pid).childrens.push(obj);
                map.set(abc[i].id,obj);
            }else if(!map.has(pid)&&pid==0){ //这里处理pid不存在,且pid 为0的处理,pid不存在,且不为0的,程序不考虑这种情况
                outputObj = new Object(abc[i]);
                map.set(abc[i].id,outputObj);
            }
        }
        console.log(outputObj);
    }

最新喜欢:

小达人小达人
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号