数组扁平化是前端面试常考的问题,本文分别采用了flat、toString、递归、reduce和some五中方式来进行实现。
1、flat
const arr = [1,2,3,[4,5],[6,7,8]];
console.log(arr.flat()); // [1,2,3,4,5,6,7,8]
但如果arr是多层嵌套的,就需要在flat函数传入嵌套数组结构深度,默认为1
2、toString
const arr = [1,2,3,[4,5],[6,7,8]];
const flatten = (arr) => arr.toString().split(',').map((item) => Number(item));
console.log(flatten(arr));
3、递归
function flatten(arr) {
const flatArr = [];
const recur = (arr) => {
arr.forEach((item) => {
if (Array.isArray(item)) {
recur(item);
} else {
flatArr.push(item);
}
})
}
recur(arr);
return flatArr;
}
4、reduce实现
function flatten(arr) {
return arr.reduce((prev, next) => {
return prev.concat(Array.isArray(next) ? flatten(next) : next);
}, [])
}
5、some
function flatten(arr) {
while(arr.some(item=>Array.isArray(item))){
arr=[].concat(...arr);
}
return arr;
}