手写实现数组铺平
七崽爱吃小饼干2026/03/04阅读 1
1. 最通用:递归实现(支持任意层级)
javascript
function flat(arr) {
let result = [];
for (let item of arr) {
// 如果是数组,递归铺平
if (Array.isArray(item)) {
result = result.concat(flat(item));
} else {
result.push(item);
}
}
return result;
}
// 测试
console.log(flat([1, [2, [3, 4], 5], 6]));
// [1,2,3,4,5,6]
2. 指定层级铺平(模拟 Array.flat(depth))
javascript
function flat(arr, depth = 1) {
let result = [];
for (let item of arr) {
if (Array.isArray(item) && depth > 0) {
// 层级减 1,递归
result = result.concat(flat(item, depth - 1));
} else {
result.push(item);
}
}
return result;
}
// 测试
console.log(flat([1, [2, [3, [4]]]], 2));
// [1,2,3,[4]]
3. 极简写法:reduce 递归
javascript
function flat(arr) {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? flat(cur) : cur);
}, []);
}
// 测试
console.log(flat([1, [2], [[3, 4], 5]]));
// [1,2,3,4,5]
总结
- 递归版:最容易理解,适合面试讲解
- 指定层级版:和原生
flat行为一致 - reduce 版:代码最短,优雅