js flatten 简单实现
使用 Array.prototype.flat()
ES2019 引入的 flat() 方法可直接实现数组扁平化,默认只展开一层:
const nested = [1, [2, [3]]];
const flattened = nested.flat(); // [1, 2, [3]]
const fullyFlattened = nested.flat(Infinity); // [1, 2, 3]
递归实现
通过递归遍历数组元素,遇到子数组时继续展开:
function flatten(arr) {
return arr.reduce((acc, val) =>
Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val),
[]);
}
// 示例:flatten([1, [2, [3]]]) → [1, 2, 3]
迭代实现
利用栈结构迭代处理嵌套数组:
function flatten(arr) {
const stack = [...arr];
const result = [];
while (stack.length) {
const next = stack.pop();
if (Array.isArray(next)) {
stack.push(...next);
} else {
result.unshift(next);
}
}
return result;
}
使用 toString(仅数字/字符串)
对于纯数字或字符串数组,可通过强制类型转换快速扁平化:
const numbers = [1, [2, [3]]];
const flattened = numbers.toString().split(',').map(Number);
// [1, 2, 3]
生成器方案
通过生成器函数实现惰性扁平化:

function* flatten(arr) {
for (const item of arr) {
Array.isArray(item) ? yield* flatten(item) : yield item;
}
}
// 使用:[...flatten([1, [2, [3]]])]
每种方法各有适用场景:flat() 最简洁但需现代环境;递归清晰但可能栈溢出;迭代适合大数据量;类型转换有局限性;生成器适合流式处理。






