js 将数组对象按分类转为树形结构
2020-05-13 本文已影响0人
冰雪_666
有如下数据结构,例如:
var industry_list =[
{
"parent_ind" : "女装",
"name" : "连衣裙"
},
{
"name": "女装"
},
{
"parent_ind" : "女装",
"name" : "半身裙"
},
{
"parent_ind" : "女装",
"name" : "A字裙"
},
{
"name": "数码"
},
{
"parent_ind" : "数码",
"name": "电脑配件"
},
{
"parent_ind" : "电脑配件",
"name": "内存"
},
{
"parent_ind" : "数码",
"name": "CPU"
},
{
"parent_ind" : "电脑配件",
"name": "GPU"
},
]
为了取用方便,我们希望可以将其转换为树状格式,例如:
{
"女装": {
"连衣裙": {},
"半身裙": {},
"A字裙": {}
},
"数码": {
"电脑配件": {
"内存": {},
"GPU": {}
},
"CPU": {}
}
}
实现一个方法完成这个转换,如下:主要用到修改引用类型地址
微信图片_20200513150623.png
function convert_forma( data ) {
let cache = {};
let _data = {};
let parent_arr = [], child_arr = [];
for( let arr of data ) {
(arr.parent_ind ? child_arr : parent_arr).push(arr);
}
while( parent_arr.length || child_arr.length ) {
if( parent_arr.length ) {
let first = parent_arr.shift();
_data[first.name] = {};
cache[ first.name ] = _data[first.name];
} else {
let first = child_arr.shift();
if( first.parent_ind in cache ) {
cache[ first.parent_ind ][ first.name ] = {};
//通过引用类型赋值,修改指向地址
cache[ first.name ] = cache[ first.parent_ind ][ first.name ];
}else{
child_arr.push(first)
}
}
}
cache=null;
return _data;
}
console.log(convert_forma( industry_list))