前言
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方法扁平化。如果您不需要考虑性能问题,那么递归方法和扩展运算符也是可行的选项。
后言
创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力