js实现flatten
实现数组扁平化的方法
在JavaScript中,数组扁平化是指将多维数组转换为一维数组的过程。以下是几种常见的实现方法:
使用递归方法
通过递归遍历数组,将嵌套的数组元素展开:
function flatten(arr) {
let result = [];
arr.forEach(item => {
if (Array.isArray(item)) {
result = result.concat(flatten(item));
} else {
result.push(item);
}
});
return result;
}
使用reduce方法
利用reduce方法可以更简洁地实现递归扁平化:

function flatten(arr) {
return arr.reduce((acc, val) =>
Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []);
}
使用ES6 flat方法
现代JavaScript提供了原生扁平化方法:
const arr = [1, [2, [3, [4]]]];
const flattened = arr.flat(Infinity); // [1, 2, 3, 4]
使用扩展运算符
对于浅层扁平化(仅展开一层),可以使用扩展运算符:

const arr = [1, [2, [3]]];
const flattened = [].concat(...arr); // [1, 2, [3]]
使用Generator函数
对于大型数组,可以使用生成器实现惰性求值:
function* flatten(arr) {
for (const item of arr) {
Array.isArray(item) ? yield* flatten(item) : yield item;
}
}
const flattened = [...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.push(next);
}
}
return result.reverse();
}
选择哪种方法取决于具体需求,如扁平化深度、性能要求和运行环境。现代浏览器中,原生flat方法通常是最优选择。






