陣列扁平化的方式
什么是陣列扁平化?
陣列扁平化:指將一個多維陣列轉化為一個一維陣列,
例:將下面陣列扁平化處理,
const arr = [1, [2, 3, [4, 5]]] // ---> [ 1, 2, 3, 4, 5 ]
1.使用flat()
flat()方法是ES10提出的,它會按照一個可指定的深度遞回遍歷陣列,并將所有元素與遍歷到的子陣列中的元素合并為一個新陣列回傳,(flat意為“水平的;平坦的”)
const result1 = arr.flat(Infinity) // 指定深度為無限
console.log(result1) // [ 1, 2, 3, 4, 5 ]
const result2 = arr.flat(1) // 指定深度為1
console.log(result2) // [ 1, 2, 3, [ 4, 5 ] ]
const result3 = arr.flat(2) // 指定深度為2
console.log(result3) // [ 1, 2, 3, 4, 5 ]
2.使用正則
-
以下做法得到的陣列元素都會變成字串,不建議使用;
const result1 = JSON.stringify(arr).replace(/\[|\]/g, '').split(',') console.log(result1) // [ '1', '2', '3', '4', '5' ] 陣列元素都變成了字串 -
對以上方法進行優化處理;
const result2 = JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']') console.log(result2) // [ 1, 2, 3, 4, 5 ]
3.使用reduce()+concat()
使用reduce拿到陣列的當前值和前一項值,判斷當前值是否為陣列,初始值設定為
[],然后使用concat進行陣列合并,
-
reduce()方法:對陣列中的每個元素執行一個由您提供的reducer函式(升序執行),將其結果匯總為單個回傳值,
-
concat()方法:用于合并兩個或多個陣列,此方法不會更改現有陣列,而是回傳一個新陣列,
function flatten(arr) {
return arr.reduce((pre, current) => {
return pre.concat(Array.isArray(current) ? flatten(current) : current)
}, [])
}
const result = flatten(arr)
console.log(result) // [ 1, 2, 3, 4, 5 ]
4.使用函式遞回
回圈遍歷陣列,發現含有陣列元素就進行遞回處理,最終將陣列轉為一維陣列,
const result = []
function exec(arr) {
arr.forEach(item => {
if (Array.isArray(item)) {
exec(item)
} else {
result.push(item)
}
})
}
exec(arr)
console.log(result) // [ 1, 2, 3, 4, 5 ]
5.使用擴展運算子+concat()
ES6新推出的擴展運算子能對陣列進行降維處理(一次降一維),回圈判斷是否含有陣列,進行concat合并,
- some()方法:測驗陣列中是不是至少有1個元素通過了被提供的函式測驗(它回傳的是一個Boolean型別的值),
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
const result = flatten(arr)
console.log(result) // [ 1, 2, 3, 4, 5 ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/373964.html
標籤:其他
上一篇:陣列去重的方法
