JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組的實(shí)現(xiàn)示例
今天在CSDN上問(wèn)答區(qū)看到一個(gè)提問(wèn)的小伙伴,是想要將一維數(shù)組轉(zhuǎn)化為三位數(shù)組的需求,正好不是很忙,樂(lè)于助人的我立馬給這位同學(xué)安排上,當(dāng)然也沒(méi)有顧及那么多去看資料什么的,就直接按照自己的思路走了!下方有源碼

上面是他的數(shù)據(jù)格式,下面呢是要轉(zhuǎn)化的數(shù)據(jù)格式

話不多說(shuō)直接上代碼
let arr = [{
'peovince': 'a', 'city': 'b', 'area': 'c'
},
{
'peovince': 'a', 'city': 'b', 'area': 'd'
},
{
'peovince': 'a', 'city': 'e', 'area': 'f'
},
{
'peovince': 'a', 'city': 'e', 'area': 'g'
},
{
'peovince': 'o', 'city': 'p', 'area': 'q'
},
{
'peovince': 'o', 'city': 'p', 'area': 'r'
},
{
'peovince': 'o', 'city': 's', 'area': 't'
},
{
'peovince': 'o', 'city': 's', 'area': 'v'
}];
開(kāi)始轉(zhuǎn)化
let list = Array.from(new Set(
arr.map(item => {
return item['peovince']
})))
let subList = []
list.forEach(res => {
arr.forEach(ele => {
if (ele['peovince'] === 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['city']) !== -1) {
subList[nameArr.indexOf(res)].children[nameArr2.indexOf(ele['city'])].children.push({
value: ele['area'],
label: ele['area'],
})
} else {
subList[nameArr.indexOf(res)].children.push({
value: ele['city'],
label: ele['city'],
children: [{
value: ele['area'],
label: ele['area'],
}]
})
}
} else {
subList.push({
value: res,
label: res,
children: [{
value: ele['city'],
label: ele['city'],
children: [{
value: ele['area'],
label: ele['area'],
}]
}]
})
}
}
})
})
console.log(subList)
最后打印的subList就是想要的格式了,讓我們看一下打印
ps:JavaScript一維數(shù)組轉(zhuǎn)二維數(shù)組
第一種情況:數(shù)組里面是字符串的時(shí)候
let array = [1, 2, 3, 4, 5, 6, 7, 8];
len len = array.length;
let n = 4; //假設(shè)每行顯示4個(gè)
let lineNum = len % n === 0 ? len / n : Math.floor( (len / n) + 1 );
let res = [];
for (let i = 0; i < lineNum; i++) {
// slice() 方法返回一個(gè)從開(kāi)始到結(jié)束(不包括結(jié)束)選擇的數(shù)組的一部分淺拷貝到一個(gè)新數(shù)組對(duì)象。且原始數(shù)組不會(huì)被修改。
let temp = array.slice(i*n, i*n+n);
res.push(temp);
}
console.log(res);
第二種情況:數(shù)組里面是對(duì)象的時(shí)候
當(dāng)數(shù)組元素為對(duì)象的時(shí)候,就不能使用slice方法進(jìn)行截取了,因?yàn)閟lice屬于淺拷貝,導(dǎo)致的問(wèn)題就是你修改了新生成的數(shù)組對(duì)象值,會(huì)影響原始數(shù)組中對(duì)象的值。
這里就介紹一種通過(guò)JSON.stringify和JSON.parse方法。
let objArray = [{a: 1}, {b: 2}, {c: 3}, {d: 4}, {e: 5}, {f: 6}, {g: 7}];
let len = objArray.length;
let n = 4; //假設(shè)每行顯示4個(gè)
let lineNum = len % 4 === 0 ? len / 4 : Math.floor( (len / 4) + 1 );
let res = [];
for (let i = 0; i < lineNum; i++) {
let temp = objArray.slice(i*n, i*n+n);
res.push(JSON.parse(JSON.stringify(temp)));
}
console.log(res);
到此這篇關(guān)于JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組的文章就介紹到這了,更多相關(guān)JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript中常見(jiàn)的Polyfill示例詳解
這篇文章主要介紹了JavaScript中常見(jiàn)Polyfill的相關(guān)資料,Polyfill是一種代碼,用于在舊版瀏覽器中實(shí)現(xiàn)不支持的現(xiàn)代JavaScript功能,以確保跨瀏覽器兼容性和代碼統(tǒng)一性,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
JS實(shí)現(xiàn)數(shù)組內(nèi)值累加常見(jiàn)的3個(gè)方法
這篇文章主要給大家介紹了關(guān)于JS實(shí)現(xiàn)數(shù)組內(nèi)值累加常見(jiàn)的3個(gè)方法,文中通過(guò)實(shí)例代碼將3個(gè)方法介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
詳解js對(duì)象中屬性的兩種類(lèi)型之?dāng)?shù)據(jù)屬性和訪問(wèn)器屬性
在理解vue底層響應(yīng)式原理時(shí),了解到,原來(lái)對(duì)象中的屬性,不單單從表面看起來(lái)那么簡(jiǎn)單是key:value形式,而是還有隱藏的內(nèi)部特性,其中對(duì)象內(nèi)的屬性分為兩種類(lèi)型的屬性:數(shù)據(jù)屬性和訪問(wèn)器屬性,本文將給大家詳細(xì)介紹一下數(shù)據(jù)屬性和訪問(wèn)器屬性,需要的朋友可以參考下2023-05-05
JavaScript中不可忽略的Symbol的盤(pán)點(diǎn)
Symbol類(lèi)型的出現(xiàn),為每個(gè)屬性賦予了獨(dú)一無(wú)二的標(biāo)識(shí)符,無(wú)論項(xiàng)目多么復(fù)雜,Symbol都能確保屬性鍵的絕對(duì)唯一性,下面我們就來(lái)看看JavaScript中那些不可忽略的Symbol吧2024-12-12
js數(shù)組方法reduce經(jīng)典用法代碼分享
本文給大家整理了很多關(guān)于js數(shù)組方法reduce的經(jīng)典代碼片段,能夠讓大家更好的理解reduce的實(shí)例用法,一起學(xué)習(xí)下吧。2018-01-01
微信小程序?qū)崿F(xiàn)單個(gè)或多個(gè)倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)單個(gè)或多個(gè)倒計(jì)時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11

