JavaScript数组平坦化的实现

JavaScript数组平坦化的实现

1.递归

 1 let flatten = function (array, res = []) {
 2     for (let element of array) {
 3         if (element instanceof Array) {
 4             flatten(element, res);
 5         } else {
 6             res.push(element);
 7         }
 8     }
 9     return res;
10 }
11 
12 let res = [];
13 let array = [[1,2],3,[[1,2],[3,4]]];
14 let flattenArray = flatten(array, res);
15 console.log(flattenArray); // 1,2,3,1,2,3,4

2.扩展运算符

  扩展运算符可以将二维数组平坦化为一维数组,我们可以通过扩展运算符与数组的some方法完成数组的平坦化。some()方法类似于数学上的“存在”量词,只要数组中有任何一个元素让断言函数返回true,那么some就会返回true。我们可以通过some()方法判断数组中是否还有被嵌套的数组,如果有就使用扩展运算符将被嵌套的数组展开,然后继续判断是否存在数组,最后将被嵌套的数组层层展开。

 1 let flatten = function (array) {
 2     while (array.some(element => element instanceof Array)) {
 3         array = [].concat(...array);
 4     }
 5     return array;
 6 }
 7 
 8 array = [1,2,[3,4],[[5],[6]]];
 9 res = flatten(array);
10 console.log(res); //1,2,3,4,5,6

3.reduce

1 let flatten = function (array) {
2     return array.reduce((result, element)=> {
3         return result.concat(Array.isArray(element) ? flatten(element) : element);
4     }, []);
5 }
6 
7 array = [1,2,[3,4],[[5],[6]]];
8 res = flatten(array);
9 console.log(res); //1,2,3,4,5,6

4.使用flat()

  数组的flat()方法可以打平“一级嵌套”,即原始数组中本身也是数组的元素将被“展开”一次,但展开后的元素如果还是数组则不会再展开了。如果想要将数组完全平坦化,可以将Infinity作为flat的参数,即将展开的层数设置为无穷大。

1 array = [1,2,[3,4],[[5],[6]]];
2 console.log(array.flat(Infinity)); //1,2,3,4,5,6

5.使用toString()

 1 let flatten = function (array) {
 2     return array.toString().split(",").map(
 3         element => {
 4             return parseInt(element);
 5         }
 6     )
 7 }
 8 array = [1,2,[3,4],[[5],[6]]];
 9 res = flatten(array);
10 console.log(res); //1,2,3,4,5,6
posted @ 2021-04-09 12:50  曹冲字仓舒  阅读(202)  评论(0)    收藏  举报