JS工作中遇到的数据格式转化

这篇博客记录了如何将包含层级关系的数组转换为JavaScript对象。通过遍历和递归,实现了从给定的数据结构转换为具有父子层级的对象。主要涉及数据处理和递归算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作项目中, 遇到一些数据转化格式的问题,特此记录一下:

1. 数组转化为具有层级关系的对象

需求: 如下图所示
原始数据
需要实现的数据格式

实现思路: 先找出一级节点,然后对应父子级依赖关系进行遍历,递归。
具体实现方法如下:

// { 女装: { 连衣裙: {}, ...  }, 数码: { 电脑配件: 内存 } }
    const list = [
      { parent_ind: '女装', name: '连衣裙' },
      { name: '女装' },
      { parent_ind: '女装', name: '半身裙' },
      { parent_ind: '女装', name: 'A字裙' },
      { parent_ind: '连衣裙', name: '连衣裙红色' },
      { name: '数码' },
      { parent_ind: '数码', name: '电脑配件' },
      { parent_ind: '电脑配件', name: '内存' },
      { parent_ind: '内存', name: '内存卡' }
    ]
    let newObj = formatArrayToObj(list)
    console.log(newObj)
    function formatArrayToObj(list) {
      let obj = {};
      // 一级父节点
      let parentList = list.filter(item => !item.parent_ind)
      // 除去一级父节点之外的节点
      let childList = list.filter(item => item.parent_ind)
      parentList.forEach(e => {
        obj[e.name] = {};
      })
      childList.forEach(e => {
        // 简化后方法
        deepLoopJudgeChild(e, obj);
      })
      return obj
    }
    function deepLoopJudgeChild(e, obj) {
      let deepLook = true;
      for(let pId in obj) {
        if (e.parent_ind === pId) {
          obj[pId][e.name] = {};
          deepLook = false;
        }
      }
      if(deepLook) {
        for(let pId in obj) {
          deepLoopJudgeChild(e, obj[pId])
        }
      }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值