今天在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://www.uj5u.com/qianduan/395145.html
標籤:其他
上一篇:js逆向案例-rus4邏輯學習
下一篇:3秒了解Ajax資料互動
