1.遍历数组
定义数组并进行遍历,判断如果是基本数据类型,直接push到新数组,如果是数组,concat中递归调用;
1 var arr=[1,2,3,[4,5,[6,7]]]; 2 function Fun(arr){ 3 var resArr=[]; 4 for(var i=0;i<arr.length;i++){ 5 if(Array.isArray(arr[i])){ 6 resArr=resArr.concat(add(arr[i])); 7 }else{ 8 resArr.push(arr[i]); 9 } 10 } 11 return resArr; 12 }
2.reduce+concat
reduce初始化一个空数组,如果是基本数据类型,直接concat到结果中,如果是数组递归调用,最后返回结果数组;
1 function Fun(arr) { 2 return arr.reduce((res, item) => { 3 return res.concat(Array.isArray(item) ? add(item) : item); 4 }, []); 5 }
3.展开运算符+while循环
ES6中展开运算符...和while循环,条件体中使用some函数判断是否为数组,是执行循环体,将所有数组展开concat到新数组中,最后返回结果数组;
1 function Fun(arr){ 2 while(arr.some(item=>Array.isArray(item))){ 3 arr=[].concat(...arr); 4 } 5 return arr 6 }
4.flat函数
ES6中的flat(Infinity),原理:递归遍历数组,并将所有元素与遍历到的子数组合并为一个新的数组返回;
1 arr=arr.flat(Infinity);
5.toString()或join()结合split()
toString()或者join(),结合split(),先转化为字符串,再通过map生成数组返回;
1 function add(arr) { 2 return arr.toString().split(",").map(item => { 3 return Number(item) 4 }) 5 }
原文:https://www.cnblogs.com/Mochenghualei/p/15227498.html