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账号...

(0)
blank

相关推荐

  • 盘点值得互联网创业者学习的十大做事风格

    盘点值得互联网创业者学习的十大做事风格中国互联网通过第19次互联网报告得出很多数据,综合成一句话就是:“发展速度惊人。”面对如此庞大的市场,国外网络巨头虎视眈眈,总想找机会跨进国门,却因为不了解中国互联网运营规范及网民的习惯,或是犹豫不决或是屡遭搁浅。  而与此同时,国内众多网站正在疯狂抢夺这块蛋糕。在这些网站的背后出谋划策的人都是大众较熟悉的,他们的思路以及做事风格,值得现在的互联网创业者学习、借荐,有相似者可对号入座。

  • 数据结构:八大数据结构分类

    数据结构分类数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。1、数组数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始…

  • Angular和Vue.js 深度对比

    Angular和Vue.js 深度对比每天学习一点点编程PDF电子书、视频教程免费下载:http://www.shitanlife.com/code

  • Matlab矩阵复制扩充

    考虑这个问题:定义一个简单的行向量a    如何复制10行呢?即:    同理,对于一个列向量,如何复制10列呢?  关键函数1:repmat(A,m,n):将向量/矩阵在垂直方向复制m次,在水平方向复制n次。      再举一个例子,对于a=[12;34]:         垂直方向复制3次,水平方向复制2次,

  • linux的软连接命令(文件夹建立软连接)

    Linux命令之软连接详解。结合示例详细说明软链接的创建,同时给出如何正确删除一个软链接。

  • 单射、满射、双射(一一映射)

    单射、满射、双射(一一映射)设函数f:X->Y,y=f(x)单射:任给x1和x2属于X,若x1≠x2,则f(x1)≠f(x2),称f为单射满射:任给y属于Y,都存在x属于X使得f(x)=y,称f为满射双射:若f既是单射又是满射,称f为双射,也叫一一对应。

发表回复

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

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