方法一、flat方法
代码:
// 传说中的五维数组
var arr = [1, [2, 3, [4, 5, [11, 12, 13], 6, [7, 8, [9, 10]]]]];
console.log(arr.flat(2));//[1, 2, 3, 4, 5, [11, 12, 13], 6, [7, 8, [9, 10]]]三维
console.log(arr.flat());//[1, 2, 3, [4, 5, [11, 12, 13], 6, [7, 8, [9, 10]]]]四维
console.log(arr.flat(Infinity));//[1, 2, 3, 4, 5, 11, 12, 13, 6, 7, 8, 9, 10]一维
方法二、递归(不改变原数组)
代码:
let nums = []
function foo(arr) {
for (var i = 0;i < arr.length;i++) {
if (arr[i] instanceof Array) {
foo(arr[i])
} else {
nums.push(arr[i])
}
}
return nums
}
var array = [[1,2,3], 4, 5, [6, [7, 8, [9, 10], [11]], 12]]
console.log(foo(array)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
方法三、递归(改变原数组)
let array = [1, [2, 3], [5, 8, [2, 3], 11], 8, 4]
let newArr = []
const flatten = (arr) => {
if (!arr instanceof Array) return
while (arr.length) {
const val = arr.shift()
if (val instanceof Array) {
flatten(val)
} else {
newArr.push(val)
}
}
return newArr
}
console.log(flatten(array)) // [1, 2, 3, 5, 8, 2, 3, 11, 8, 4]