构造树型json_json转树形结构

博客内容介绍了如何将一个包含'demp'和'line'字段的JSON数组转换为树形结构,首先展示了原始实现,然后通过createTree函数进行优化,以按照'demp'和'line'递归构造树形结构。这种方法适用于数据拆分和组织。
摘要由CSDN通过智能技术生成

var obj1=[

{

"demp":"001",

"line":"a",

"id":"1",

},

{

"demp":"001",

"line":"b",

"id":"2",

},

{

"demp":"001",

"line":"c",

"id":"3",

},

{

"demp":"002",

"line":"a",

"id":"4",

},

{

"demp":"002",

"line":"b",

"id":"5",

},

{

"demp":"002",

"line":"b",

"id":"6",

}

]

function trans(obj1,key1){

var obj={};

var arr=[];

for(i in obj1){

if(arr.indexOf(obj1[i][key1])=="-1"){

arr.push(obj1[i][key1]);

console.log(i);

}

}

for(j in arr){

for(k in obj1){

if(obj1[k][key1]==arr[j]){

if(obj[arr[j]]){

obj[arr[j]].push(obj1[k]);

}else{

obj[arr[j]]=[obj1[k]];

}

}

}

}

return obj;

}

var obj2=trans(obj1,"demp");

var newobj={};

for(i in obj2){

obj2[i]=trans(obj2[i],"line");

}

console.log(obj2);

按照事业部产品线拆分,程序有待优化

经过优化后:

function createTree(arr,keys) {

function createObj(arr, arrORobj, keys, start) {

for (let i = 0; i < arr.length; i++) {

// 当不存在一个排序的key,返回[]

if (start >= keys.length) {

let newArray=Array.isArray(arrORobj)?arrORobj:[]

return newArray.concat(arr[i])

}

let curKey = keys[start]

let curVal = arr[i][curKey]

if(!curVal)continue

// 存在key对应的值存在,传入{}构造

let newObj = arrORobj[curVal] ? arrORobj[curVal] : {}

arrORobj[curVal] = createObj([arr[i]], newObj, keys, start + 1)

}

// 存在一个排序的key,返回{}

return arrORobj

}

return createObj(arr,{},keys,0)

}

createTree(obj1,['demp','line'])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值