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

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

今天在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'
    }];

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

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

相关推荐

  • noip2015_noip2021复赛

    noip2015_noip2021复赛扩展欧几里得模板题。注意取模。#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#definein(x)scanf("%d",&x)#definelin(x)scanf("%lld",&x)#defineout(x)printf("%d",x)#defin…

    2022年8月22日
  • 手动实现一维离散数据小波分解与重构

    手动实现一维离散数据小波分解与重构前言本文集中前面主要介绍了离散数据的傅里叶变换,并且得到了较好的效果!那既然有了傅里叶变换这个工具,为什么还需要小波变换呢?因为:傅里叶变换只能告诉你原始信号中有哪些频率,但不能告诉你这些频率的信号出现在什么时间!也就说明:如果信号是”时变”的(频率随着时间是改变的),那么单纯用傅里叶变换所能反映的信息就十分有限了!因此,针对时变信号,我们使用小波变换。图1展示”时变信号”与”时不变信号”区别:图1:时不变信号与时变信号时不变与时变的区别,看下面的实现的代码就很轻易理解:x=0:0.001:1

    2022年10月7日
  • oracle如何查看视图语句_oracle视图使用

    oracle如何查看视图语句_oracle视图使用手机评站网今天精心准备的是《oracle视图》,下面是详解!怎么在oracle中查询出所有的视图view?1、通过pl/sql,登录oracle数据库,2、敲入sql,可以查询本库的所有视图view,select*fromall_viewst,结果中owner代表不同的用户;3、如果查看本用户的所有视图view,执行sql,select*fromuser_viewst,可以看到本用…

    2022年10月21日
  • 前端VsCode使用插件

    前端VsCode使用插件vscode前端插件

    2022年7月25日
  • LaTeX详细教程+技巧总结[通俗易懂]

    LaTeX详细教程+技巧总结[通俗易懂]LaTeX技巧总结,包含LaTeX工具,LaTeX模板,LaTeX技巧,LaTeX基础,文章架构,字体、大小和颜色,链接,列表,图片,表格,数学公式,算法(伪代码),代码块,论文写作,等等。

    2022年5月16日
  • Activiti工作流框架学习笔记(一)「建议收藏」

    Activiti工作流框架学习笔记(一)「建议收藏」工作流的概念先看下面两张图:对以上两张图进行说明:假设这两张图就是华谊兄弟的请假流程图图的组成部分:人物:范冰冰、冯小刚、王中军事件(动作):请假、批准、不批准通过以上分析我们就可以抽象成:接下来给出工作流的书面化概念:工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、

    2022年10月6日

发表回复

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

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