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方法
ES6引入了Array.prototype.flat()方法,可以方便地实现数组扁平化。
const arr = [1, [2, [3, [4]]]];
const flattened = arr.flat(Infinity);
使用展开运算符
结合展开运算符和concat方法可以实现有限深度的扁平化。
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
使用Generator函数
通过Generator函数可以实现惰性求值的扁平化。

function* flatten(arr) {
for (const item of arr) {
if (Array.isArray(item)) {
yield* flatten(item);
} else {
yield item;
}
}
}
const flattened = [...flatten([1, [2, [3]]])];
每种方法都有其适用场景,递归方法和reduce方法适合深度不确定的数组,flat方法最为简洁但需要ES6支持,展开运算符方法适合有限深度的扁平化,Generator方法适合处理大型数据集。






