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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 3D游戏建模真的很累吗?前景怎么样?需要什么基础?[通俗易懂]

    3D游戏建模真的很累吗?前景怎么样?需要什么基础?[通俗易懂]所有行业都是一样的,没有什么容易的,只不过这一行是偏向于技术的,一个有好的建模师月薪10k+是很常见的,这个需要有自己刻苦学习的成果。游戏建模前景在游戏模型行业,你基本不用担心找不到工作,因为游戏模型师人才缺口非常大。举个例子:游戏制作公司的人员配比大多数是这样的:比如100人的三维制作组,可能有60人在做模型贴图,10个人在K动画。只要你保证技能在手,一定是抢手的人才。在几年前游戏建模这个行业不仅仅缺人才,甚至连新手都非常稀缺,那个时候公司愿意招聘实习生,培养他们然后给公司干活,但是工资一定不

    2022年5月12日
    44
  • WindowsPhone统计图表控件 – 第三方控件visifire

    WindowsPhone统计图表控件 – 第三方控件visifire++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载!转载请注明出处:http://blog.csdn.net/mr_raptor/article/details/7230124++++++++++++++++++++++++++++++++++++++++++ Silverlight对于图形图像处理方面,从1.0时

    2022年7月21日
    9
  • pycharm安装opencv-python_pycharm opencv

    pycharm安装opencv-python_pycharm opencv使用pip安装:pipinstallpython-opencv在网络距离美国较远的情况下,或PIP版本未达到要求的情况下,会install失败。解决方法1.重试2.科学方法,这里说明使用科学方法的端口问题,切记不要和本地计算机使用同一个端口,容易造成Pycharm未知错误。3.手动去官网下载文件这里有两种类型的手动安装文件setup.pyXXXX.whl以上两种文件都可以通过pycharm的命令行工具直接cd到目录进行直接安装。方法:1pyth

    2022年8月27日
    3
  • MD5加密详解

    MD5加密详解MD5加密详解加密过程:密码:123456(明文形式)—–>加密后49ba59abbe56e0571.密码在请求提交后到达控制器2.到达控制后通过加密规则,转换成密文3.在经过DAO查询与数据库中已经存在的密文密码比对是否一直,一致,则放行。用户注册密码时是加密存储的用户修改密码时,也需要进行加密存储加密规则:加密规则可以自定义,在项目中通常使用BASE64和MD5,本文使用的加密规则就是MD5,BASE64:可反编码的编码方式​

    2022年7月27日
    7
  • ARM开发环境搭建

    ARM开发环境搭建1.下载E:\ARM开发\工具软件\ARM裸机开发工具\Yagarto工具包路径下两个程序2.下载E:\ARM开发\工具软件\USB转串口驱动\CH3403.下载E:\ARM开发\工具软件\ARM裸机开发工具\JRE4.打开设备管理器->右键->更新5.6.选择E:\ARM开发\工具软件\ARM裸机开发工具\DRIVER目录下的(注意:此操作win7环境下,win7以上还要有点其他步骤)选择好就点你下一步7.出现红色弹窗点8.完成9.在E:\ARM开发\工具

    2022年5月29日
    37
  • Linux下忽略信号SIGPIPE的方法[通俗易懂]

    Linux下忽略信号SIGPIPE的方法[通俗易懂]为了客户端进程收到SIGPIPE不退出,我打算忽略该信号,下面是我用过的方法:(1)间接忽略staticvoidSignalHandler(intnSigno){signal(nSigno,SignalHandler);switch(nSigno){caseSIGPIPE:printf(“Processwillnote…

    2022年5月7日
    37

发表回复

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

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