js实现数组扁平化输出
数组扁平化的概念
数组扁平化是指将多维数组转换为一维数组的过程。例如,将 [1, [2, [3, 4]], 5] 转换为 [1, 2, 3, 4, 5]。
使用递归实现
递归方法可以处理任意深度的嵌套数组。通过遍历数组的每个元素,如果元素是数组则递归调用扁平化函数,否则将元素添加到结果数组中。

function flattenDeep(arr) {
return arr.reduce((acc, val) =>
Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val),
[]);
}
const nestedArray = [1, [2, [3, 4]], 5];
console.log(flattenDeep(nestedArray)); // [1, 2, 3, 4, 5]
使用 Array.prototype.flat()
ES2019 引入了 flat() 方法,可以直接实现数组扁平化。通过指定深度参数(默认值为 1),可以控制扁平化的层级。
const nestedArray = [1, [2, [3, [4]]], 5];
console.log(nestedArray.flat(Infinity)); // [1, 2, 3, 4, 5]
使用 reduce 和 concat
结合 reduce 和 concat 方法,可以手动实现一层扁平化。如果需要多层扁平化,可以结合递归。

function flatten(arr) {
return arr.reduce((acc, val) => acc.concat(val), []);
}
const nestedArray = [1, [2, 3], 4];
console.log(flatten(nestedArray)); // [1, 2, 3, 4]
使用扩展运算符
扩展运算符可以展开一层数组,适合浅层扁平化场景。
const nestedArray = [1, [2, 3], 4];
const flattened = [].concat(...nestedArray);
console.log(flattened); // [1, 2, 3, 4]
使用 toString 方法
如果数组元素均为数字或字符串,可以通过 toString 方法将数组转换为字符串,再分割为数组。这种方法仅适用于特定数据类型。
const nestedArray = [1, [2, [3, 4]], 5];
const flattened = nestedArray.toString().split(',').map(Number);
console.log(flattened); // [1, 2, 3, 4, 5]
性能比较
flat(Infinity)是性能最优的方案,但需支持 ES2019。- 递归方法通用性强,但可能因调用栈过深导致性能问题。
- 扩展运算符和
reduce适合浅层扁平化。
根据实际需求选择合适的方法,优先考虑代码可读性和运行环境兼容性。






