文章目錄
- 前言
- 方法一
- 方法二
- 方法三
- 方法四
- 總結
- 后言
前言
hello world歡迎來到前端的新世界
😜當前文章系列專欄:JavaScript
🐱?👓博主在前端領域還有很多知識和技術需要掌握,正在不斷努力填補技術短板。(如果出現錯誤,感謝大家指出)🌹
💖感謝大家支持!您的觀看就是作者創作的動力
方法一
使用遞歸方法扁平化——性能較差
function flatten(arr) {return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []);
}let multiArr = [1, 2, [3, 4, [5, 6], 7], [8, 9]];
let flatArr = flatten(multiArr);let uniqueArr = [...new Set(flatArr)];let sortedArr = uniqueArr.sort((a, b) => {return a - b});console.log(sortedArr);
這種方法使用了遞歸來扁平化整個數組,可以處理任意多層的嵌套數組。但是,對于非常大的多維數組,遞歸方法的性能會很差。
方法二
使用ES6的擴展運算符扁平化——性能較差
let multiArr = [1, 2, [3, 4, [5, 6], 7], [8, 9]];
let flatArr = [].concat(...multiArr);let uniqueArr = [...new Set(flatArr)];let sortedArr = uniqueArr.sort((a, b) => {return a - b});console.log(sortedArr);
這種方法使用了ES6的擴展運算符將多維數組扁平化為一維數組,然后使用Set進行去重。但是,它仍然需要創建一個新的數組,因此對于非常大的多維數組,它的性能也不是很好。
方法三
使用reduce方法扁平化——性能較好
let multiArr = [1, 2, [3, 4, [5, 6], 7], [8, 9]];
let flatArr = multiArr.reduce((acc, val) => {return acc.concat(Array.isArray(val) ? val.flat() : val);
}, []);let uniqueArr = [...new Set(flatArr)];let sortedArr = uniqueArr.sort((a, b) => {return a - b});console.log(sortedArr);
這種方法使用了reduce方法對多層嵌套的數組進行扁平化。由于使用了原生的Array.prototype.flat方法,因此它的性能相對較快。但是,需要注意的是flat方法可能無法在所有環境下使用。
方法四
使用迭代方法扁平化——性能最佳
let multiArr = [1, 2, [3, 4, [5, 6], 7], [8, 9]];
let queue = [...multiArr];
let flatArr = [];while(queue.length > 0) {let node = queue.shift();if(Array.isArray(node)) {queue.unshift(...node);} else if(node !== undefined) {flatArr.push(node);}
}let uniqueArr = [...new Set(flatArr)];let sortedArr = uniqueArr.sort((a, b) => {return a - b});console.log(sortedArr);
這種方法使用了迭代方法扁平化數組,沒有使用任何遞歸,也不需要重新分配內存。這使得它在處理大型多維數組時具有更好的性能。
總結
最優解決方案是使用迭代方法扁平化,因為它具有最好的性能,并且不會產生與內存分配相關的問題。但是,如果您需要兼容一些老的瀏覽器或運行時環境,您可以使用reduce方法扁平化。如果您不需要考慮性能問題,那么遞歸方法和擴展運算符也是可行的選項。
后言
創作不易,要是本文章對廣大讀者有那么一點點幫助 不妨三連支持一下,您的鼓勵就是博主創作的動力