JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組方法
有人提問(wèn)想要將一維數(shù)組轉(zhuǎn)化為三位數(shù)組的需求,下面就給提問(wèn)的的小伙伴安排上
下面是后端同學(xué)返給我們的一維數(shù)組數(shù)據(jù)格式:
?? ?[{
? ? ? '品牌': 'xiaomi', '機(jī)型': '10', '配置': '512'
? ? },
? ? {
? ? ? '品牌': 'xiaomi', '機(jī)型': '10', '配置': '128'
? ? },
? ? {
? ? ? '品牌': 'xiaomi', '機(jī)型': '11', '配置': '128'
? ? },
? ? {
? ? ? '品牌': 'xiaomi', '機(jī)型': '11', '配置': '64'
? ? },
? ? {
? ? ? '品牌': 'iPhone', '機(jī)型': '10', '配置': '128'
? ? },
? ? {
? ? ? '品牌': 'iPhone', '機(jī)型': '11', '配置': '64'
? ? },
? ? {
? ? ? '品牌': 'iPhone', '機(jī)型': '12', '配置': '64'
? ? },
? ? {
? ? ? '品牌': 'honor', '機(jī)型': '4', '配置': '256'
? ? },
? ? {
? ? ? '品牌': 'honor', '機(jī)型': '5', '配置': '128'
? ? },
? ? {
? ? ? '品牌': 'honor', '機(jī)型': '6', '配置': '128'
? ? }];下面是我們想要轉(zhuǎn)化的數(shù)據(jù)格式(轉(zhuǎn)化成三維數(shù)組 第一層級(jí)為品牌、第二層級(jí)為型號(hào)、第三層級(jí)為配置)
? [
? ? ? {
? ? ? ? "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"
? ? ? ? ? ? ? }
? ? ? ? ? ? ]
? ? ? ? ? }
? ? ? ? ]
? ? ? }
? ? ]首先我們定義一個(gè)arr變量接收我們的一維數(shù)組,然后將arr作為參數(shù)傳遞給我們轉(zhuǎn)化數(shù)組的函數(shù),函數(shù)返回的就是我們最終的三維數(shù)組了

下面就是我們的arrConversion源碼:
? ? arrConversion (arr) {
? ? ? let keys = Object.keys(arr[0])
? ? ? let level1 = keys[0]//獲取一級(jí)屬性名稱(chēng)
? ? ? let level2 = keys[1]//獲取二級(jí)屬性名稱(chēng)
? ? ? let level3 = keys[2]//獲取三級(jí)屬性名稱(chēng)
? ? ? 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
? ? }輸出結(jié)果正確:

到此這篇關(guān)于JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組方法的文章就介紹到這了,更多相關(guān)JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何用JavaScript實(shí)現(xiàn)一個(gè)數(shù)組惰性求值庫(kù)
這篇文章主要介紹了如何用JavaScript實(shí)現(xiàn)一個(gè)數(shù)組惰性求值庫(kù),對(duì)惰性求值感興趣的同學(xué),可以參考下2021-05-05
js實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)簡(jiǎn)單的抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
微信小程序數(shù)據(jù)操作指南之從綁定到更新的操作方法
在微信小程序開(kāi)發(fā)中,數(shù)據(jù)操作是不可或缺的一環(huán),文章詳細(xì)介紹了數(shù)據(jù)綁定、更新等方法,并提供示例和注意事項(xiàng),幫助開(kāi)發(fā)者更好地應(yīng)用這些技術(shù),本文給大家介紹微信小程序數(shù)據(jù)操作指南之從綁定到更新,感興趣的朋友跟隨小編一起看看吧2024-10-10
JavaScript模擬文件拖選框樣式v1.0的實(shí)例
下面小編就為大家?guī)?lái)一篇JavaScript模擬文件拖選框樣式v1.0的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
JavaScript如何實(shí)現(xiàn)圖片處理與合成
這篇文章主要介紹了JavaScript如何實(shí)現(xiàn)圖片處理與合成,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
OpenLayers3實(shí)現(xiàn)地圖鷹眼以及地圖比例尺的添加
這篇文章主要為大家詳細(xì)介紹了OpenLayers3實(shí)現(xiàn)地圖鷹眼以及地圖比例尺的添加,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
淺談關(guān)于JS下大批量異步任務(wù)按順序執(zhí)行解決方案一點(diǎn)思考
這篇文章主要介紹了淺談關(guān)于JS下大批量異步任務(wù)按順序執(zhí)行解決方案一點(diǎn)思考,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
three.js簡(jiǎn)單實(shí)現(xiàn)類(lèi)似七圣召喚的擲骰子
這篇文章主要為大家介紹了three.js簡(jiǎn)單實(shí)現(xiàn)類(lèi)似七圣召喚的擲骰子示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

