分类数据转换为树形结构

const excelStr = `港口数据    货主基本信息    货主代码
港口数据    货主基本信息    货主全称
港口数据    货主基本信息    货主所属国家
港口数据    货主基本信息    货主地址
港口数据    货主基本信息    货主电话
港口数据    货主基本信息    货主银行账户
港口数据    货主基本信息    货主类型
港口数据    货主费用信息    剩余金额
港口数据    货主费用信息    已扣金额
港口数据    货主费用信息    结算方式
港口数据    货主费用信息    付款人名称
港口数据    货主费用信息    付款人账号
港口数据    货主费用信息    信用等级
港口数据    货主费用信息    特殊收费
港口数据    货主汇率信息    汇率ID
港口数据    货主汇率信息    币种代码
港口数据    货主汇率信息    汇率
港口数据    货主汇率信息    开始时间
港口数据    货主汇率信息    结束时间
港口数据    货主货物信息    货名
港口数据    货主货物信息    装货港
港口数据    货主货物信息    卸货港
港口数据    货主货物信息    总重量
港口数据    货主货物信息    总件数
港口数据    货主货物信息    运输方式
港口数据    货主货物信息    货状态
港口数据    货主箱信息    箱号
港口数据    货主箱信息    箱型
港口数据    货主箱信息    箱重
港口数据    货主箱信息    箱状态
港口数据    货主箱信息    箱材料
港口数据    货物船舶信息    船舶代码
港口数据    货物船舶信息    船舶类型
港口数据    货物船舶信息    中文名
港口数据    货物船舶信息    船公司
港口数据    货物船舶信息    船代理
港口数据    货物船舶信息    国家
港口数据    货物航运信息    航次
港口数据    货物航运信息    船期
港口数据    货物航运信息    服务航线
港口数据    货物航运信息    航班
港口数据    货物航运信息    航班号
港口数据    货物航运信息    班期
港口数据    货物航运信息    周期
工商数据    企业信息    企业名称
工商数据    企业信息    企业类型
工商数据    企业信息    注册资本
工商数据    企业信息    企业状态
工商数据    企业信息    经营范围
工商数据    企业信息    所在行政区划
工商数据    企业信息    所属行业
工商数据    企业信息    营运状况
信用机构数据    企业信用信息    信用评分
信用机构数据    企业信用信息    经营能力
信用机构数据    企业信用信息    财务状况
信用机构数据    企业信用信息    行业及区域
信用机构数据    企业信用信息    历史信用
信用机构数据    企业法人信息    上网流量
信用机构数据    企业法人信息    通信数据
信用机构数据    企业法人信息    消费数据
信用机构数据    企业法人信息    终端数据
法院数据    失信企业    失信被执行人组织机构代码
法院数据    失信企业    失信被执行人法定代表人姓名
法院数据    失信企业    失信被执行人身份证号码
法院数据    失信企业    判决信息
法院数据    风险企业    失信黑名单
海关数据    风险企业    供应商联系人姓名
海关数据    风险企业    船次
海关数据    风险企业    装货港
海关数据    风险企业    卸货港
海关数据    风险企业    原产地
海关数据    风险企业    集装箱号
国税/地税数据    纳税信息    纳税人识别号
国税/地税数据    纳税信息    纳税人名称
国税/地税数据    纳税信息    生效日期
国税/地税数据    纳税信息    失效日期
国税/地税数据    纳税信息    实缴金额
国税/地税数据    纳税信息    处罚金额
国税/地税数据    纳税信息    欠税金额`
  const arr1 = excelStr.split('\n')
  const arr2 = arr1.map(item => {
    const x = item.split('\t')
    return {e0: 'HuaWeiData', e1: x[0], e2: x[1], e3: x[2], value: 100}
  })
  // console.log(arr2)
  // const s1 = arr2.map(item => {
  //   if (item.e1 === '国税/地税数据' && item.e2 === '纳税信息') {
  //       return {name: item.e3, value: item.value}    
  //   }
    
  // })
  // console.log(JSON.stringify(s1))
  // const node = {}
  // const getCount = (data, num, cNode) => {
  //   data.forEach(item => {
  //     const key = item['e' + num]
  //     cNode[key] = cNode[key] || {}
  //     if (!cNode[key].name) {
  //       cNode[name].name = key
  //       cNode[name].children = []
  //     }
  //     cNode[name].children.push(item)
  //   })
  //   const keys = Object.keys(cNode)
  //   const temp = []
  //   console.log(keys)
  //   keys.forEach(key => {
  //     temp.push(cNode[key])
  //   })
  //   if (num === 0) {
  //     cNode = temp[0]
  //   } else {
  //     cNode = temp
  //   }
  //   return 1
  // }
  
  // console.log('JSON', getCount(arr2, 0, node))
  const turnToTreeOfOneRoot = arr => {
  const root = {}

  // 获取需要改造的childrenArray, node引用类型,指针不变
  const getChildrenArr = (data, node, num) => {
    let key
    data.forEach(item => {
      key = item[`e${num}`]
      // 如此分类arr需同key值的键值对集中在一起
      node[key] = node[key] || []
      if (!root.name) {
        root.name = key
      }
      delete item[`e${num}`]
      node[key].push(item)
    })
    return key
  }
  // arr.forEach(item => {
  //   key = item.e0
  //   root[key] = root[key] || []
  //   if (!root.name) {
  //     root.name = key
  //   }
  //   delete item.e0
  //   root[key].push(item)
  // })

  // 获取根结点
  const name = getChildrenArr(arr, root, 0)
  root.children = root[name]
  delete root[name]

  // 改造各节点childrenArray为children
  const setChildren = () => {
    const num = 1
    const foo = (children, n) => {
      // 存储childrenArr
      const cur = {}

      getChildrenArr(children, cur, n)
      // 清空数组,保持指针地址不变
      children.splice(0, children.length)
      // 遍历每个键
      Object.keys(cur).forEach((key, index) => {
        if (n < 3) {
          children.push({name: key, children: cur[key]})
          // 递归, 继续改造children
          foo(children[index].children, n + 1)
        } else {
          children.push({name: key, value: cur[key][0].value})
        }
      })
    }
    foo(root.children, num)
  }
  setChildren()
  return root
}

  console.log('JSON', turnToTreeOfOneRoot(arr2))
  
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值