flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。用法:
var newArray = arr.flat([depth])参数:
depth可选:指定要提取嵌套数组的结构深度,默认值为 1。返回值:一个包含将数组与子数组中所有元素的新数组。
// 递归写法
// 使用 reduce、concat 和递归展开无限多层嵌套的数组
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
function flatDeep(arr, d = 1) {
return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), []) : arr.slice();
};
flatDeep(arr1, Infinity);
// 非递归写法
function flatDeep(arr = [], depth = 1) {
while(arr.some(item => (Array.isArray(item) && depth > 0))) {
// ...arr每次只能展开一层
arr = [].concat(...arr);
// 限制层级
depth--;
}
return arr;
};
// const flatArr = flatDeep([1,2,3,[4,[5,[6]]]], Infinity)