多维数组扁平化, 先来个简单的
1. 二维数组变一维
使用 Array.prototype.flat()
特性
基本用法
var arr1 = [1,2,3,[4,5]]
console.log(arr1.flat())
// [1,2,3,4,5]
flag
默认会将二维数组转一维,
flag()
方法会移除数组中的空项
var arr2 = [1,2,,[4,5]]
console.log(arr2.flat())
// [1,2,3,4,5]
2. 多维数组变一维
2.1 使用 Infinity
可以展开任意深度的嵌套数组
var arr3 = [1,2,[3,[4,],5]]
console.log(arr3.flag(Infinity))
// [1,2,3,4,5]
2.2 使用 reduce
与 concat
var arr = [1,2,[3,4]];
arr.reduce(
(arr,val) => acc.concat(val),[]
)
// [1,2,3,4]
// 使用扩展运算符 (只支持二维)
[].concat(...arr)
3. 任意维度转换
reduce + concat + isArray + recursivity
// 使用 reduce concat 和递归展开无限多层嵌套的数组
var arr = [1,2,3,[1,2,3,4,[2,3,4]]];
function flagDeep(arr,d=1){
return d > 0 ?
arr.reduce(
(acc, val) =>
acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), []
)
: arr.slice();
}
// arr.slice(start,end) 不改变原数组
flatDeep( arr, Infinity )