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}{评论,你的意见是我进步的财富!}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • java迭代创建文件,并写入内容

    java迭代创建文件,并写入内容java迭代创建文件,并写入内容

  • linux 抓包命令tcpdump

    linux 抓包命令tcpdump一、概述顾名思义,tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或者端口的过滤,并提供and\or\not等逻辑语句来帮助你去掉无用的信息。二、选项介绍-a 将网络地址和广播地址转变成名字; -b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。 -c 指定要监听的数据包数量,在收

  • WRF参数化方案_参数优化方法

    WRF参数化方案_参数优化方法=============================================微物理过程方案:Lin长波辐射方案:RRTM短波辐射方案:Dudhia陆面过程方案:Noah边界层方案:YSU积云参数化方案:Kain-Fritsch微物理过程方案:Goddard长波辐射方案:RRTM短波辐射方案:Goddard陆面过程方案:Noah边

    2022年10月26日
  • 深度学习-softmax损失函数「建议收藏」

    深度学习-softmax损失函数「建议收藏」softmax损失函数softmax函数定义softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而进行多分类!softmax计算公式,假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的softmax值为:Si=ei∑jejS_i=\frac{e^i}{\sum_je^j}对于softmax定义比较简单,当我们在应用多

  • hdu 4507 数位dp(求和,求平方和)[通俗易懂]

    hdu 4507 数位dp(求和,求平方和)

  • Android angle_android 界面悬停

    Android angle_android 界面悬停最近在研究android游戏引擎Angle,准备纪录下学习心得。我的目的是用它实现UI,给我开发的安卓应用添加一些迷人的效果。初步研究了一下,只要解决下列问题就可以了:1•汉字显示 2•动态更新纹理,比如从网络下载图片,更新显示 3•简单的动画效果 4•与播放器整合 5•实现一些基本控件,如List(文本、图片),Button,Tab,TextView等 6•与非openg

发表回复

您的电子邮箱地址不会被公开。

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