请教JS对象转化数组处理?

需要把 一个对象

{ "17": {
        "code": "17",
        "text": "铲车",
        "type": "机械"
      },
      "18": {
        "code": "18",
        "text": "拖拉机",
        "type": "机械"
      },
      "19": {
        "code": "19",
        "text": "平地机",
        "type": "机械"
      },
      "101": {
        "code": "101",
        "text": "客车",
        "type": "场内设备"
      },
      "102": {
        "code": "102",
        "text": "货车",
        "type": "场内设备"
      },
      "103": {
        "code": "103",
        "text": "飞机牵引车",
        "type": "场内设备"
      },
      "104": {
        "code": "104",
        "text": "加油车",
        "type": "场内设备"
      },
      "105": {
        "code": "105",
        "text": "供水车",
        "type": "场内设备"
      }
}

按照 type分组 转化成下面结构

  [{
    label,
    value,
    children: [
      {
        label,
        value,
      }
    ]
}]

期望结果是

[
  {
     label: '场内设备',
     value: '场内设备'
    children: [
      {
          label: '货车',
          value: '101'
      }
    ]
  },
  {
     label: '机械',
     value: '机械'
    children: [
      {
          label: '铲车',
          value: '17'
      }
    ]
  }
]
阅读 1.3k
2 个回答
✓ 已被采纳

Object.values和reduce实现

function regroup(obj){
    return Object.values(Object.values(obj).reduce((p,v)=>{
        !p[v.type] ? p[v.type] = {
            label: v.type,
            value: v.type,
            children: [{
                label:v.text,
                value:v.code
            }]
        } :  p[v.type].children.push({
            label:v.text,
            value:v.code
        })
        return p;
    },{}))
}
var oldObject={ "17": {
        "code": "17",
        "text": "铲车",
        "type": "机械"
      },
      "18": {
        "code": "18",
        "text": "拖拉机",
        "type": "机械"
      },
      "19": {
        "code": "19",
        "text": "平地机",
        "type": "机械"
      },
      "101": {
        "code": "101",
        "text": "客车",
        "type": "场内设备"
      },
      "102": {
        "code": "102",
        "text": "货车",
        "type": "场内设备"
      },
      "103": {
        "code": "103",
        "text": "飞机牵引车",
        "type": "场内设备"
      },
      "104": {
        "code": "104",
        "text": "加油车",
        "type": "场内设备"
      },
      "105": {
        "code": "105",
        "text": "供水车",
        "type": "场内设备"
      }
}
var newObject=[];
for(var o in oldObject){
var tempObject=oldObject[o];
var tempType=tempObject.type;
     var typeExist=false;
     for(var x in newObject){
       var tempNewObject=newObject[x];
       if(tempNewObject.label===tempType){
               typeExist=true;
            tempNewObject.children.push({label:tempObject.text,value:tempObject.code});
            break;
       }       
     }
     if(!typeExist){
         newObject.push({label:tempType,value:tempType,children:[{label:tempObject.text,value:tempObject.code}]});
     }
}

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