|
给出的数据如下:
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);
} |
|
最新喜欢:
|