多种方式实现数组的扁平化处理
//task 1 split方法处理
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
1 function flattening(arr) { 2 let arr1 = (arr + "").split(","); 3 //此时得到的每一项的字符数组 4 //接着转数字 5 let arr2 = arr1.map(item => { 6 return item * 1; 7 }) 8 return arr2; 9 }//task 2 递归
1 function flattening(arr, newArr = []) { 2 for (let i = 0; i < arr.length; i++) { 3 if (Array.isArray(arr[i])) { 4 flattening(arr[i], newArr) 5 } else { 6 newArr.push(arr[i]) 7 } 8 } 9 return newArr 10 }//task 2.1 递归第二种写法
1 function flattening(arr) { 2 var res = []; 3 arr.map(item => { 4 if (Array.isArray(item)) { 5 res = res.concat(flattening(item)); 6 } else { 7 res.push(item); 8 } 9 }); 10 return res; 11 }//task 3 扩展运算符
1 function flattening(arr) { 2 while (arr.some(item => Array.isArray(item))) { 3 arr = [].concat(...arr) 4 } 5 return arr; 6 }//task 4 reduce+递归实现
1 function flattening(arr) { 2 let newArr=arr.reduce((prev,cur)=>{ 3 return [].concat(prev,cur) 4 }) 5 6 let flag=newArr.some(item=>Array.isArray(item)) 7 if(flag){ 8 return flattening(newArr); 9 }else{ 10 return newArr 11 } 12 }
其实说了这么多方法 es6有一个封装好的方法可以进行数组扁平化处理
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。Array.flat();
flat 方法默认没有参数 这时只会降维降一层
可以传数字指定降维次数 传个无穷就是全部展开
flat放法不会改变原数组 并且不支持node运行
顺带提一句合并数组的几种方法
let arr1 = [1, 2]; let arr2 = [3, 4]; concat arr1 = arr1.concat(arr2); 扩展运算符 arr1 = [...arr1, ...arr2]; 或者 arr1.push(...arr2); 当数据小的时候三者没有区别 但是数据特别大的时候 concat性能远远高于其他两个
更多精彩