js實現陣列的扁平化
阿新 • • 發佈:2021-12-13
目錄
- 陣列扁平化的方式
- 1.使用flat()
- 2.使用正則
- 3.使用reduce()+concat()
- 4.使用函式遞迴
- 5.使用擴充套件運算子+concat()
- 總結
陣列扁平化的方式
什麼是陣列扁平化?
陣列扁平化:指將一個多維陣列轉化為一個一維陣列。
例:將下面陣列扁平化處理。
const arr = [1,[2,3,[4,5]]] // ---> [ 1,2,4,5 ]
1.使用flat()
flat() 方法是ES10提出的,它會按照一個可指定的深度遞迴遍歷陣列,並將所有元素與遍歷到的子陣列中的元素合併為一個新陣列返回。(flat意為“水平的;平坦的”)
const result1 = arr.flat(Infinity) // 指定深度為無限 console.log(result1) // [ 1,5 ] const result2 = arr.flat(1) // 指定深度為1 console.log(result2) // [ 1,[ 4,5 ] ] const result3 = arr.flat(2) // 指定深度為2 console.log(result3) // [ 1,5 ]
2.使用正則
以下做法得到的陣列元素都會變成字串,不建議使用;
const result1 = ON.stringify(arr).replace(/\[|\]/g,'').split(',') console.log(result1) // [ '1','2','3','4','5' ] 陣列元素都變成了字串
對以上方法進行優化處理;
const result2 = JSON.parse('[' + JSON.stringifwww.cppcns.comy(arr).replace(/\[www.cppcns.com|\]/g,'') + ']')
console.log(result2) // [ 1,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,5 ]
4.使用函式遞迴
迴圈遍歷陣列,發現含有陣列元素就進行遞迴處理,最終將陣列轉為一維陣列。
const result = []
function exec(arr) {
arr.forEach(item => {
if (Array.isArray(item)) {
exec(item)
} else {
result.push(item)
}
XBxEqOunbz })
}
exec(arr)
console.log(result) // [ 1,5 ]
5.使用擴充套件運算子+concat()
ES6新推出的擴充套件運算子能對陣列進行降維處理(一次降一維),迴圈判斷是否含有陣列,進行concat合併。
some()方法:測試陣列中是不是至少有1個元素通過了被提供的函式測試(它返回的是一個Boolean型別的值)。
function flatten(arr) { while (arr.some(item => Array.isArray(item))) { arr = [].concat(...arr) } returnwww.cppcns.com arr } const result = flatten(arr) console.log(result) // [ 1,5 ]
總結
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注我們的更多內容!