想把json按照事业部,产品线变成树形结构,请问该如何优化?

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);### 问题描述


### 问题出现的环境背景及自己尝试过哪些方法


### 相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)


### 你期待的结果是什么?实际看到的错误信息又是什么?
阅读 1.4k
2 个回答
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'])

先按照产品线构造小树,再按照事业部把小树聚合成各事业部的大树,最后再聚合成一整颗树

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题