js多维数组转化为一维数组_js 多维数组

js多维数组转化为一维数组_js 多维数组一个方法搞定js一维数组转化三维数组

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

今天在CSDN上问答区看到一个提问的小伙伴,是想要将一维数组转化为三位数组的需求,正好不是很忙,乐于助人的我立马给这位同学安排上

下面是后端同学返给我们的一维数组数据格式

	[{ 
   
      '品牌': 'xiaomi', '机型': '10', '配置': '512'
    },
    { 
   
      '品牌': 'xiaomi', '机型': '10', '配置': '128'
    },
    { 
   
      '品牌': 'xiaomi', '机型': '11', '配置': '128'
    },
    { 
   
      '品牌': 'xiaomi', '机型': '11', '配置': '64'
    },
    { 
   
      '品牌': 'iPhone', '机型': '10', '配置': '128'
    },
    { 
   
      '品牌': 'iPhone', '机型': '11', '配置': '64'
    },
    { 
   
      '品牌': 'iPhone', '机型': '12', '配置': '64'
    },
    { 
   
      '品牌': 'honor', '机型': '4', '配置': '256'
    },
    { 
   
      '品牌': 'honor', '机型': '5', '配置': '128'
    },
    { 
   
      '品牌': 'honor', '机型': '6', '配置': '128'
    }];

Jetbrains全家桶1年46,售后保障稳定

下面是我们想要转化的数据格式(转化成三维数组 第一层级为品牌、第二层级为型号、第三层级为配置)

    [
      { 
   
        "value": "xiaomi",
        "label": "xiaomi",
        "children": [
          { 
   
            "value": "10",
            "label": "10",
            "children": [
              { 
   
                "value": "512",
                "label": "512"
              },
              { 
   
                "value": "128",
                "label": "128"
              }
            ]
          },
          { 
   
            "value": "11",
            "label": "11",
            "children": [
              { 
   
                "value": "128",
                "label": "128"
              },
              { 
   
                "value": "64",
                "label": "64"
              }
            ]
          }
        ]
      },
      { 
   
        "value": "iPhone",
        "label": "iPhone",
        "children": [
          { 
   
            "value": "10",
            "label": "10",
            "children": [
              { 
   
                "value": "128",
                "label": "128"
              }
            ]
          },
          { 
   
            "value": "11",
            "label": "11",
            "children": [
              { 
   
                "value": "64",
                "label": "64"
              }
            ]
          },
          { 
   
            "value": "12",
            "label": "12",
            "children": [
              { 
   
                "value": "64",
                "label": "64"
              }
            ]
          }
        ]
      },
      { 
   
        "value": "honor",
        "label": "honor",
        "children": [
          { 
   
            "value": "4",
            "label": "4",
            "children": [
              { 
   
                "value": "256",
                "label": "256"
              }
            ]
          },
          { 
   
            "value": "5",
            "label": "5",
            "children": [
              { 
   
                "value": "128",
                "label": "128"
              }
            ]
          },
          { 
   
            "value": "6",
            "label": "6",
            "children": [
              { 
   
                "value": "128",
                "label": "128"
              }
            ]
          }
        ]
      }
    ]

首先我们定义一个arr变量接收我们的一维数组,然后将arr作为参数传递给我们转化数组的函数,函数返回的就是我们最终的三维数组了
在这里插入图片描述
下面就是我们的arrConversion源码

    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

    }

输出结果正确
在这里插入图片描述

原 创 不 易 , 希 望 大 家 多 多 支 持 ! ! ! \textcolor{blue}{原创不易,希望大家多多支持!!!}

? 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 ! \textcolor{green}{点赞,你的认可是我创作的动力!}

⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 ! \textcolor{green}{收藏,你的青睐是我努力的方向!}

✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 ! \textcolor{green}{评论,你的意见是我进步的财富!}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226908.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 嵌入式学习计划

    嵌入式学习计划从今天开始,我要正式的学习关于嵌入式。初步的计划是,选择一款嵌入式Linux系统进行学习,目前选用的FreeRTOS设备,通过查询博客,阅读源码,看书方式进行全面的了解。其次,还要选择一款嵌入式设备进行实战,鉴于目前手头刚好有一台STM32F107VCT6,就选择它了,而且STM32F10x系列的设备资料也比较齐全。对于嵌入式设备的学习路线,首先学习使用固件库进行编程,学习的内容包括uart,flash,gpio等相关的内容,同时辅之以数字电子基础书籍进行更深入的了解。再都了解了之后,将FreeRT

    2022年5月18日
    37
  • cglib动态代理实现原理_jdk cglib 动态代理 区别

    cglib动态代理实现原理_jdk cglib 动态代理 区别cglib动态代理详解我们都知道jdk的动态代理内部调用切面无效的问题,而cglib则不会出现这种情况,这是为什么?cglib就一定不会出现内部调用切面无效的问题吗?cglib针对每一个类只创建了一个代理类吗?为什么cglib的效率要比jdk的动态代理低呢?首先我们看一下通常我们是如何使用cglib增强一个类的publicclassMain{staticclassTest{publicvoidtest(){System.out.pr

    2022年10月21日
    3
  • JAVA获取uuid_java uri类

    JAVA获取uuid_java uri类UUID获取以及格式化没有什么描述的直接看代码

    2022年8月10日
    8
  • SQL 增加列、修改列、删除列

    SQL 增加列、修改列、删除列

    2021年7月7日
    74
  • 定位?

    定位?

    2021年6月18日
    97
  • 微软中文站点资源列表 & 程序员网站资源宝库[通俗易懂]

    微软中文站点资源列表 & 程序员网站资源宝库[通俗易懂]WEB开发http://www.microsoft.com/china/msdn/Archives/catalog/web/MSDN微软开发技巧系列网络讲座http://www.microsoft.com/china/msdn/events/webcasts/Webcast/webcasts.mspxMSDN归档技术资源库http://www.mic…

    2022年7月13日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号