今天在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}{評論,你的意見是我進步的財富!}評論,你的意見是我進步的財富!