excel数据递归组装

154 阅读3分钟

上传接口excel后获取表格数据,把一维数组组装成多维数组。

const resData = [
    {
      "scope": "response",
      "name": "响应参数:",
      "children": []
    },
    {
      "scope": "response",
      "name": "业务字段名称",
      "type": "类型",
      "required": "必须",
      "description": "说明",
      "children": []
    },
    {
      "scope": "response",
      "name": "code",
      "type": "String",
      "required": "是",
      "description": "响应代号",
      "children": []
    },
    {
      "scope": "response",
      "name": "msg",
      "type": "String",
      "required": "是",
      "description": "响应信息",
      "children": []
    },
    {
      "scope": "response",
      "name": "data",
      "type": "Object",
      "required": "是",
      "description": "返回数据",
      "children": []
    },
    {
      "scope": "response",
      "name": "dataStart",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquiryId",
      "type": "Long",
      "required": "是",
      "description": "询价单号",
      "children": []
    },
    {
      "scope": "response",
      "name": "tenantId",
      "type": "String",
      "required": "是",
      "description": "公司",
      "children": []
    },
    {
      "scope": "response",
      "name": "tenantName",
      "type": "String",
      "required": "是",
      "description": "公司名称",
      "children": []
    },
    {
      "scope": "response",
      "name": "cityName",
      "type": "String",
      "required": "是",
      "description": "询价城市",
      "children": []
    },
    {
      "scope": "response",
      "name": " plateNo",
      "type": "String",
      "required": "是",
      "description": "车牌",
      "children": []
    },
    {
      "scope": "response",
      "name": "userCarModelName",
      "type": "String",
      "required": "是",
      "description": "车辆信息描述",
      "children": []
    },
    {
      "scope": "response",
      "name": "address",
      "type": "String",
      "required": "是",
      "description": "地址",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquiryTime",
      "type": "Date",
      "required": "是",
      "description": "询价时间",
      "children": []
    },
    {
      "scope": "response",
      "name": "contactName",
      "type": "String",
      "required": "是",
      "description": "联系人",
      "children": []
    },
    {
      "scope": "response",
      "name": "mobileNo",
      "type": "String",
      "required": "是",
      "description": "手机号码",
      "children": []
    },
    {
      "scope": "response",
      "name": "taskStatusName",
      "type": "String",
      "required": "是",
      "description": "询价状态",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquiryDescribe",
      "type": "String",
      "required": "是",
      "description": "任务描述",
      "children": []
    },
    {
      "scope": "response",
      "name": "expireTime",
      "type": "Date",
      "required": "是",
      "description": "过期时间",
      "children": []
    },
    {
      "scope": "response",
      "name": "images",
      "type": "List<String>",
      "required": "是",
      "description": "图片地址列表",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquirySubTaskList",
      "type": "List",
      "required": "是",
      "description": "询价子任务列表",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquirySubTaskListStart",
      "children": []
    },
    {
      "scope": "response",
      "name": "garageId",
      "type": "Long",
      "required": "是",
      "description": "修理厂id",
      "children": []
    },
    {
      "scope": "response",
      "name": "garageName",
      "type": "String",
      "required": "是",
      "description": "修理厂名称",
      "children": []
    },
    {
      "scope": "response",
      "name": "loginTime",
      "type": "Date",
      "required": "是",
      "description": "登录时间",
      "children": []
    },
    {
      "scope": "response",
      "name": "maintainItemNum",
      "type": "Int",
      "required": "是",
      "description": "维修项目数量",
      "children": []
    },
    {
      "scope": "response",
      "name": "address",
      "type": "String",
      "required": "是",
      "description": "修理厂地址",
      "children": []
    },
    {
      "scope": "response",
      "name": "contactNo",
      "type": "String",
      "required": "是",
      "description": "修理厂电话",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquirySubId",
      "type": "Long",
      "required": "是",
      "description": "子任务id",
      "children": []
    },
    {
      "scope": "response",
      "name": "images",
      "type": "List<String>",
      "required": "是",
      "description": "修理厂图片地址列表",
      "children": []
    },
    {
      "scope": "response",
      "name": "subtaskStatus",
      "type": "String",
      "required": "是",
      "description": "任务状态",
      "children": []
    },
    {
      "scope": "response",
      "name": "maintainPredictPrice",
      "type": "Decimal",
      "required": "是",
      "description": "维修总估价",
      "children": []
    },
    {
      "scope": "response",
      "name": "basePrice",
      "description": "报价基准值",
      "children": []
    },
    {
      "scope": "response",
      "name": "priceDeparture",
      "type": "String",
      "required": "否",
      "description": "报价偏离",
      "children": []
    },
    {
      "scope": "response",
      "name": "resultFlag",
      "type": "String",
      "required": "是",
      "description": "结果标识(标价过高,过低/推荐)",
      "children": []
    },
    {
      "scope": "response",
      "name": "entryDay",
      "type": "int",
      "required": "是",
      "description": "入驻天数",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquiryNum",
      "type": "int",
      "required": "是",
      "description": "询价单数",
      "children": []
    },
    {
      "scope": "response",
      "name": "planNum",
      "type": "int",
      "required": "是",
      "description": "报价次数",
      "children": []
    },
    {
      "scope": "response",
      "name": "contractNo",
      "type": "String",
      "required": "否",
      "description": "联系人",
      "children": []
    },
    {
      "scope": "response",
      "name": "itemList",
      "type": "List",
      "required": "是",
      "description": "询价项目列表",
      "children": []
    },
    {
      "scope": "response",
      "name": "itemListStart",
      "children": []
    },
    {
      "scope": "response",
      "name": "manHourDTOList",
      "type": "List",
      "description": "工时费用对象集合",
      "children": []
    },
    {
      "scope": "response",
      "name": "manHourDTOListStart",
      "children": []
    },
    {
      "scope": "response",
      "name": "manHourGroup",
      "type": "String",
      "required": "是",
      "description": "工时组",
      "children": []
    },
    {
      "scope": "response",
      "name": "manHourSubGroup",
      "type": "String",
      "required": "是",
      "description": "工时分组",
      "children": []
    },
    {
      "scope": "response",
      "name": "manHourName",
      "type": "String",
      "required": "是",
      "description": "工时名称",
      "children": []
    },
    {
      "scope": "response",
      "name": "manHourCost",
      "type": "BigDecimal",
      "required": "是",
      "description": "工时费",
      "children": []
    },
    {
      "scope": "response",
      "name": "manHourDTOListEnd",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquiryMaintainItemDTOList",
      "type": "List",
      "description": "配件费用对象集合",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquiryMaintainItemDTOListStart",
      "children": []
    },
    {
      "scope": "response",
      "name": "carAccessoriesName",
      "description": "汽车配件名称",
      "children": []
    },
    {
      "scope": "response",
      "name": "carAccessoriesQuality",
      "description": "汽车配件品质",
      "children": []
    },
    {
      "scope": "response",
      "name": "unitPrice",
      "description": "配件单价",
      "children": []
    },
    {
      "scope": "response",
      "name": "num",
      "description": "数量",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquiryMaintainItemDTOListEnd",
      "children": []
    },
    {
      "scope": "response",
      "name": "itemListEnd",
      "children": []
    },
    {
      "scope": "response",
      "name": "enquirySubTaskListEnd",
      "children": []
    },
    {
      "scope": "response",
      "name": "dataEnd",
      "children": []
    }
  ]
  
  // 递归方法
  function fib(array, index = 0, name1) {
    let result = []
    for (; index < array.length; index++) {
        //终止循环
        if(array[index].name === `${name1}Start`){
          continue
        }
        // 跳出循环
        if(array[index].name === `${name1}End`){
          break
        }
        // 子项
        if(array[index].type === 'Object' || array[index].type === 'List'){
          let child = fib(array, index+1, array[index].name)
          array[index].children = child.result
          result.push(array[index])
          index = child.index
        }else{
          result.push(array[index])
        }
    }
    if(name1) {
      return {result, index}
    }
    return result
  }
  
  console.log(fib(resData))