前言
看了挺多资料,觉得很多都是不全,或者是不够方便,来花点时间总结下数组的扁平化处理方法,主要是为铁子门方便和不用处理拿去就能用。
let arr = [1,[2,3],4];
//这里申明一个数组下面所有的方法都是这个数组
1.数组自带方法–flat
console.log(arr.flat(Infinity));//[1,2,3,4]
//PS:Infinity为不管多少层都展开成一维---也可自己输入层数--如下
console.log(arr.flat(2));//这就是展开两层
2.正则处理(该方法数字会被变成字符串)
let res = JSON.stringify(arr).replace(/\[|\]/g,'');
console.log(res.split(','))
3.正则优化,解决方法2问题
let res = JSON.stringify(arr).replace(/\[|\]/g,'');
console.log(JSON.parse('['+res+']'));
4.es5递归处理
let newArr=[];
function openArr(arr) {
for(let arrOne of arr){
if(Array.isArray(arrOne)){openArr(arrOne)}else{newArr.push(arrOne)}
}
return newArr;
}
console.log(openArr(arr))
5.es6数组的reduce处理(递归思想)
const reduceArr = (arr)=>{
return arr.reduce((pre,cur)=>{
return pre.concat(Array.isArray(cur) ? reduceArr(cur) : cur)
},[])
}
console.log(reduceArr(arr))
可能有小伙伴对于数组的reduce
不是很理解,这里直接截个图来理解一下reduce的各个参数意思