flat js实现
在JavaScript中实现扁平化(flatten)数组操作可以通过多种方式完成,以下是几种常见的方法:
使用 Array.prototype.flat()
ES2019引入了原生方法flat(),可直接将嵌套数组扁平化。默认只展开一层,可通过参数指定深度或使用Infinity完全展开。
const nestedArray = [1, [2, [3, [4]]]];
const flattened = nestedArray.flat(Infinity);
console.log(flattened); // [1, 2, 3, 4]
递归实现
通过递归遍历数组元素,若元素是数组则继续展开,否则收集到结果中。
function flattenDeep(arr) {
return arr.reduce((acc, val) =>
Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val),
[]);
}
const result = flattenDeep([1, [2, [3, [4]]]]);
迭代实现(栈)
使用栈结构非递归地展开数组,适合处理深层嵌套。
function flattenIterative(arr) {
const stack = [...arr];
const result = [];
while (stack.length) {
const next = stack.pop();
if (Array.isArray(next)) {
stack.push(...next);
} else {
result.push(next);
}
}
return result.reverse();
}
使用 concat 与扩展运算符
结合concat和扩展运算符逐层展开,需多次调用直到无嵌套。
function flattenOneLevel(arr) {
return [].concat(...arr);
}
// 多次调用直到完全扁平化
性能注意事项
- 原生
flat()方法性能最优,但需考虑浏览器兼容性。 - 递归方式代码简洁,但可能栈溢出(极端深层嵌套时)。
- 迭代方法适合处理未知深度的数组,但代码稍复杂。
根据实际需求选择方法,现代项目优先使用flat(),兼容性要求高的场景可采用递归或迭代方案。







