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

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

話不多說直接上代碼
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'
}];
開始轉(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個
let lineNum = len % n === 0 ? len / n : Math.floor( (len / n) + 1 );
let res = [];
for (let i = 0; i < lineNum; i++) {
// slice() 方法返回一個從開始到結(jié)束(不包括結(jié)束)選擇的數(shù)組的一部分淺拷貝到一個新數(shù)組對象。且原始數(shù)組不會被修改。
let temp = array.slice(i*n, i*n+n);
res.push(temp);
}
console.log(res);
第二種情況:數(shù)組里面是對象的時(shí)候
當(dāng)數(shù)組元素為對象的時(shí)候,就不能使用slice方法進(jìn)行截取了,因?yàn)閟lice屬于淺拷貝,導(dǎo)致的問題就是你修改了新生成的數(shù)組對象值,會影響原始數(shù)組中對象的值。
這里就介紹一種通過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個
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)數(shù)組內(nèi)值累加常見的3個方法
這篇文章主要給大家介紹了關(guān)于JS實(shí)現(xiàn)數(shù)組內(nèi)值累加常見的3個方法,文中通過實(shí)例代碼將3個方法介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用js具有一定參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
詳解js對象中屬性的兩種類型之?dāng)?shù)據(jù)屬性和訪問器屬性
在理解vue底層響應(yīng)式原理時(shí),了解到,原來對象中的屬性,不單單從表面看起來那么簡單是key:value形式,而是還有隱藏的內(nèi)部特性,其中對象內(nèi)的屬性分為兩種類型的屬性:數(shù)據(jù)屬性和訪問器屬性,本文將給大家詳細(xì)介紹一下數(shù)據(jù)屬性和訪問器屬性,需要的朋友可以參考下2023-05-05
JavaScript中不可忽略的Symbol的盤點(diǎn)
Symbol類型的出現(xiàn),為每個屬性賦予了獨(dú)一無二的標(biāo)識符,無論項(xiàng)目多么復(fù)雜,Symbol都能確保屬性鍵的絕對唯一性,下面我們就來看看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)單個或多個倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)單個或多個倒計(jì)時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11

