js實現數組的扁平化
數組扁平化的方式
什麼是數組扁平化?
數組扁平化:指將一個多維數組轉化為一個一維數組。
例:將下面數組扁平化處理。
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 ]
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- JS前端面試數組扁平化手寫flat函數示例
- JavaScript中數組flat方法的使用與實現方法
- JavaScript數據扁平化詳解
- js利用reduce方法讓你的代碼更加優雅
- js多維數組降維的5種方法