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


相关推荐

  • mysql字符串拼接的方法_sql中拼接字符串的方法

    mysql字符串拼接的方法_sql中拼接字符串的方法总是记不住字符串拼接,每次都要百度去搜索,所以在这里记录一下,好方便后续的查找,如有错误和问题可以提出,谢谢。字符串拼接分为几种方式,在这里会一一举例写出:第一种:mysql自带语法CONCAT(string1,string2,…),此处是直接把string1和string2等等的字符串拼接起来(无缝拼接哦)说明:此方法在拼接的时候如果有一个值为NULL,则返回NULL…

    2022年9月30日
    1
  • PyTorch实现ResNet18

    PyTorch实现ResNet18ResNet-18结构基本结点代码实现importtorchimporttorch.nnasnnfromtorch.nnimportfunctionalasFclassRestNetBasicBlock(nn.Module):def__init__(self,in_channels,out_channels,stride):super(RestNetBasicBlock,self).__init__()self.

    2022年5月26日
    36
  • 数据预处理之Bartlett’s球状检验

    数据预处理之Bartlett’s球状检验用于检验相关阵是否为单位阵,即检验各个变量是否各自独立。在因子分析中,若拒绝原假设,则说明可以做因子分析,若不拒绝原假设,则说明这些变量可能独立提供一些信息,不适合做因子分析。因子分析前,首先进行KMO检验和巴特利球体检验,KMO检验系数>0.5,(巴特利特球体检验的x2统计值的显著性概率)P值<0.05时,问卷才有结构效度,才能进行因子分析,因子分析主要是你自己做了一份调查问…

    2022年6月18日
    45
  • ON、WHERE、HAVING的差别

    ON、WHERE、HAVING的差别

    2021年12月14日
    42
  • 西门子scl语言和c语言,西门子PLC的SCL语言与STL语言比较一下-工业支持中心-西门子中国…「建议收藏」

    西门子scl语言和c语言,西门子PLC的SCL语言与STL语言比较一下-工业支持中心-西门子中国…「建议收藏」1.STL有点类似汇编语言,和机器码对应,无论哪种语言写的PLC程序都可以转换成STL查看,所以掌握基本的STL指令和语法是很有帮助的。另外STL直接操作寄存器,实现同样功能时可以减少运算量和寄存器调用次数,并且只关心数据类型的长度(例如不区分int和word),减少了数据类型转换,总的来说执行效率高,但实现复杂运算和逻辑时编程繁琐。2.SCL类似于高级语言Pascal、C之类,可以通过简单的语…

    2022年10月7日
    2
  • 组播(Multicast)传输[通俗易懂]

    组播(Multicast)传输[通俗易懂]组播(Multicast)传输:在发送者和每一接收者之间实现点对多点网络连接。如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包。它提高了数据传送效率。减少了骨干网络出现拥

    2022年8月5日
    5

发表回复

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

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