1,递归
function flatten(arr) {
var result = [];
if (!Array.isArray(arr)) {
result.push(arr);
} else {
for (let i = 0; i < arr.length; i++) {
result = result.concat(flatten(arr[i]));
}
}
return result;
}
2,调用flat()
括号内写入Infinity,可展开任意深度的嵌套数组
let arr = [1, 2, [3, 'k', [5, 6, [7, 8, [9, 10]]]]];
var a=arr.flat(Infinity)
console.log(a);
3,累加器
let arr3 = [1, 2, [3, 'k', [5, 6, [7, 8, [9, 10]]]]];
function flatten(arr) {
return arr.reduce((acc, cur)=> {
return acc.concat(Array.isArray(cur) ? flatten(cur) : cur)
}, [])
//acc为累加器,在当前函数里面,累加器初始值为[]
}
var b=flatten(arr3)
console.log(b)
4,扩展运算符
function flatten(arr) {
var arr;
//arr.some是对数组中每一个item都执行一次指定的函数
while (arr.some(a => Array.isArray(a))) {
arr = [].concat(...arr);
}
return arr;
}