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
扩展运算符可以将二维数组平坦化为一维数组,我们可以通过扩展运算符与数组的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
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
数组的flat()方法可以打平“一级嵌套”,即原始数组中本身也是数组的元素将被“展开”一次,但展开后的元素如果还是数组则不会再展开了。如果想要将数组完全平坦化,可以将Infinity作为flat的参数,即将展开的层数设置为无穷大。
1 array = [1,2,[3,4],[[5],[6]]]; 2 console.log(array.flat(Infinity)); //1,2,3,4,5,6
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
原文:https://www.cnblogs.com/ccpeng/p/14636659.html