隔壁杨_ 2021-12-29 13:50 采纳率: 87.5%
浏览 119
已结题

js一维数组如何转换为三维数组呀?

后台给返回的一维数组,但是我需要chidren格式连接的三维的结构,类似这种

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

  • 写回答

4条回答 默认 最新

  • 几何心凉 2022年度博客之星前端领域TOP 1 2021-12-29 14:05
    关注

    直接调用下面的方法然后定义一个变量接收方法的返回值就可以了

        arrConversion (arr) {
          let keys = Object.keys(arr[0])
          let level1 = keys[0]//获取一级属性名称
          let level2 = keys[1]//获取二级属性名称
          let level3 = keys[2]//获取三级属性名称
          let list = Array.from(new Set(
            arr.map(item => {
              return item[level1]
            })))
          let subList = []
          list.forEach(res => {
            arr.forEach(ele => {
              if (ele[level1] === res) {
                let nameArr = subList.map(item => item.value)
                if (nameArr.indexOf(res) !== -1) {
                  let nameArr2 = subList[nameArr.indexOf(res)].children.map(item => item.value)
                  if (nameArr2.indexOf(ele[level2]) !== -1) {
                    subList[nameArr.indexOf(res)].children[nameArr2.indexOf(ele[level2])].children.push({
                      value: ele[level3],
                      label: ele[level3],
                    })
                  } else {
                    subList[nameArr.indexOf(res)].children.push({
                      value: ele[level2],
                      label: ele[level2],
                      children: [{
                        value: ele[level3],
                        label: ele[level3],
                      }]
                    })
                  }
                } else {
                  subList.push({
                    value: res,
                    label: res,
                    children: [{
                      value: ele[level2],
                      label: ele[level2],
                      children: [{
                        value: ele[level3],
                        label: ele[level3],
                      }]
                    }]
                  })
                }
              }
            })
    
          })
          return subList
    
        }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 星系收藏 2021-12-29 14:08
    关注

    map()

    评论 编辑记录
  • weixin_43385047 2021-12-29 14:16
    关注

    const arrayToTree = (arr) => {
    if (!Array.isArray(arr) || arr.length < 1) return null;
    const [root] = arr.filter(item => item.label === null); //先过滤出第一层 如果你是1 或者null
    const addChildren = (node, dataList) => {
    const children = dataList
    .filter(item => item.label=== node.id)
    .map(item => addChildren(item, dataList));
    return { ...node, children };
    };
    return addChildren(root, arr);
    };

    最简单的方法 我猜你的 初始结构是[{label:1,value:2},{label:2,value:3}]

    评论 编辑记录
  • ZionHH 2021-12-29 14:00
    关注

    一维什么结构

    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月6日
  • 已采纳回答 12月29日
  • 创建了问题 12月29日

悬赏问题

  • ¥100 webapi的部署(标签-服务器)
  • ¥20 怎么加快手机软件内部计时的时间(关键词-日期时间)
  • ¥15 C语言除0问题的检测方法
  • ¥15 为什么四分管的内径有的是16mm有的15mm,四分不应该是12.7mm吗
  • ¥15 macos13下 ios交叉编译的问题
  • ¥15 bgz压缩文件怎么打开
  • ¥15 封装dll(引入了pcl的点云设计库)
  • ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
  • ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
  • ¥15 小新14API2019想用bios调风扇