如何将一个二维数组拍平成一维数组,或者三维数组拍平成一维数组。
例如:[1,[2,3],4,[5,[6],7],8,[9]]转为[1,2,3,4,5,6,7,8,9]
1、递归法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16let testArr = [1,[2,3],4,[5,[6],7],8,[9]];
const flatten = (() => {
let _newarr = [];
return function fn(arr) {
arr.forEach((value,index) => {
if(!Array.isArray(value)){
_newarr.push(value);
}else{
_newarr.concat(fn(value));
}
})
return _newarr;
}
})();
console.log(flatten(testArr));
2、 reduce
利用数组的reduce方法1
2
3
4
5
6
7
8
9
10
11
12
let testArr = [1,[2,3],4,[5,[6],7],8,[9]];
const flatten = (arr) => {
return arr.reduce((accumulator, currentValue) => {
if(!Array.isArray(currentValue)){
return [...accumulator,currentValue];
}else{
return [...accumulator,...flatten(currentValue)];
}
},[])
}
console.log(flatten(testArr));
- ES6的一个新特性扩展云算法 “…”,“[…abc,…fff]”其作用相当于abc.concat(fff),这种用法更加直观明了,还有就是运用了reduce方法。reduce是javascript语言中数组的一个方法。
- 数组调用recduce方法时,可以传递两个参数,第一个参数为回调函数,第二个参数为一个初始值。回调函数中需要传递两个参数,第一个参数为每次执行函数的返回值,第二个参数为当前索引对应数组的值。