js flat 实现
实现数组扁平化的方法
在 JavaScript 中,数组扁平化是指将多维数组转换为一维数组的过程。以下是几种常见的实现方法。
使用递归实现
通过递归遍历数组的每个元素,如果元素是数组则继续递归,否则将元素添加到结果数组中。

function flatten(arr) {
let result = [];
arr.forEach(item => {
if (Array.isArray(item)) {
result = result.concat(flatten(item));
} else {
result.push(item);
}
});
return result;
}
const nestedArray = [1, [2, [3, [4]], 5]];
console.log(flatten(nestedArray)); // [1, 2, 3, 4, 5]
使用 reduce 实现
利用 reduce 方法遍历数组,递归处理嵌套数组。
function flatten(arr) {
return arr.reduce((acc, item) => {
return acc.concat(Array.isArray(item) ? flatten(item) : item);
}, []);
}
const nestedArray = [1, [2, [3, [4]], 5]];
console.log(flatten(nestedArray)); // [1, 2, 3, 4, 5]
使用 ES6 flat 方法
ES6 提供了 flat 方法,可以指定扁平化的深度。默认深度为 1,使用 Infinity 可以完全扁平化。

const nestedArray = [1, [2, [3, [4]], 5]];
console.log(nestedArray.flat(Infinity)); // [1, 2, 3, 4, 5]
使用栈实现
通过栈结构迭代处理数组元素,非数组元素直接压入结果,数组元素则展开后继续处理。
function flatten(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();
}
const nestedArray = [1, [2, [3, [4]], 5]];
console.log(flatten(nestedArray)); // [1, 2, 3, 4, 5]
使用生成器实现
通过生成器函数递归遍历数组,生成扁平化后的序列。
function* flatten(arr) {
for (const item of arr) {
if (Array.isArray(item)) {
yield* flatten(item);
} else {
yield item;
}
}
}
const nestedArray = [1, [2, [3, [4]], 5]];
console.log([...flatten(nestedArray)]); // [1, 2, 3, 4, 5]
以上方法各有优缺点,可以根据具体场景选择最适合的实现方式。递归和 reduce 方法简洁但可能受调用栈限制,flat 方法最直接但需要现代浏览器或环境支持,栈和生成器方法适合处理大规模数据。






