一. 原理
- 数组扁平化:将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。
:::tips
- [ 1, [2] ] => [ 1,2 ]
- [ [ 1, 2 ], [ 3, 4 ] ] => [ 1, 2, 3, 4 ]
- [ 1, 2, [ 3, 4, [ 5, 6 ] ] ] => [ 1, 2, 3, 4, 5, 6 ]
:::
二. 应用
三. 手写代码
function flatter1(arr) {
return arr.flat(Infinity);
}
function flatter2(arr) {
while(arr.some( (el) => (Array.isArray(el)) )){
arr = [].concat(...arr);
}
return arr;
}
function flatter3(arr) {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur)?flatter3(cur):cur);
}, []);
}
function flatter4(arr) {
let result = [];
for(let i=0; i<arr.length; i++){
if(Object.prototype.toString.call(arr[i]) == '[object Array]'){
result = result.concat(flatter4(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
四. 测试代码
var arr = [1, [2, 3, [4, [5, [6]]]]];
console.log(flatter1(arr)); // [ 1, 2, 3, 4, 5, 6 ]
console.log(flatter2(arr)); // [ 1, 2, 3, 4, 5, 6 ]
console.log(flatter3(arr)); // [ 1, 2, 3, 4, 5, 6 ]
console.log(flatter4(arr)); // [ 1, 2, 3, 4, 5, 6 ]