数组扁平化
const a = [1, 2, [4, 3, 6], [2, 45, [4, 5, 3, [6, 4, 7]]]];
leetcode/数组扁平化.md at master · xingpengchao/leetcode (github.com)
数组扁平化
第一种:循环+递归
function flattenDeep(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
newArr.push.apply(newArr, flattenDeep(arr[i]));
} else {
newArr.push(arr[i]);
}
}
return newArr;
}
第二种:apply + some
function flattenDeep(arr) {
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat.apply([], arr);
}
return arr;
}
第三种:扩展运算符(...)
function flattenDeep(arr) {
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
第四种:数组的reduce
function flattenDeep(arr) {
return arr.reduce((prev, next) => {
return prev.concat(Array.isArray(next) ? flattenDeep(next) : next);
}, []);
}
第五种:ES10的flat
function flattenDeep(arr) {
return arr.flat(Infinity);
}



