const arr = [1, [2, [3, [4, 5]]], [6, [7, [8, 9, [9]]]]];
方式一 使用递归
const flattena = (arr) => {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flattena(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
};
flattena(a); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 9]
方式二 使用arr.reduce数组缩减
const flattenb = (arr) => {
return arr.reduce((prev, next) => {
return prev.concat(Array.isArray(next) ? flattenb(next) : next)
}, []);
};
flattenb(a); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 9]
方式三 使用arr.some判断数组中是否还包含数组
const flattenc = (arr) => {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
};
flattenc(arr); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 9]