JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組方法
有人提問想要將一維數(shù)組轉(zhuǎn)化為三位數(shù)組的需求,下面就給提問的的小伙伴安排上
下面是后端同學(xué)返給我們的一維數(shù)組數(shù)據(jù)格式:
?? ?[{ ? ? ? '品牌': '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' ? ? }];
下面是我們想要轉(zhuǎn)化的數(shù)據(jù)格式(轉(zhuǎn)化成三維數(shù)組 第一層級為品牌、第二層級為型號、第三層級為配置)
? [ ? ? ? { ? ? ? ? "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變量接收我們的一維數(shù)組,然后將arr作為參數(shù)傳遞給我們轉(zhuǎn)化數(shù)組的函數(shù),函數(shù)返回的就是我們最終的三維數(shù)組了
下面就是我們的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 ? ? }
輸出結(jié)果正確:
到此這篇關(guān)于JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組方法的文章就介紹到這了,更多相關(guān)JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript中如何使用cookie實現(xiàn)記住密碼功能及cookie相關(guān)函數(shù)介紹
cookie是網(wǎng)站設(shè)計者放置在客戶端(瀏覽器)的小文本文件,cookie不僅能夠?qū)崿F(xiàn)保存密碼功能,還可以通過cookie保存最近瀏覽記錄增加用戶體驗。本文給大家介紹js使用cookie實現(xiàn)記住密碼功能及cookie相關(guān)函數(shù)講解,感興趣的朋友一起看看吧2016-11-11JavaScript事件委托實現(xiàn)原理及優(yōu)點進(jìn)行
這篇文章主要介紹了JavaScript事件委托實現(xiàn)原理及優(yōu)點進(jìn)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08