1. 常规操作
function flatDeep(arr, container = []) {
arr.forEach(item => {
if(Array.isArray(item)){
flatDeep(item, container);
} else{
container.push(item);
}
});
return container;
}
2. 使用reduce
function fD(arr){
return arr.reduce((ret, item) => ret.concat(Array.isArray(item) ? fD(item) : item), []);
}
3. 使用ECMAScript 2019 中数组的flat 方法
Array.prototype.flat
- 参数
- depth (可选) 指定要提取嵌套数组的结构深度,默认为1.
var arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
//使用 Infinity,可展开任意深度的嵌套数组
var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]