js flat 实现
实现数组扁平化的方法
在 JavaScript 中,数组扁平化指的是将多维数组转换为一维数组。以下是几种常见的实现方法:
使用 Array.prototype.flat()
ES2019 引入了 flat() 方法,可以直接实现数组扁平化。默认情况下,flat() 只会扁平化一层,但可以通过传递参数指定深度。
const arr = [1, [2, [3, [4]]]];
const flattened = arr.flat(Infinity); // 使用 Infinity 可以完全扁平化
console.log(flattened); // [1, 2, 3, 4]
递归实现
通过递归遍历数组,将嵌套数组展开为一维数组。
function flatten(arr) {
let result = [];
arr.forEach(item => {
if (Array.isArray(item)) {
result = result.concat(flatten(item));
} else {
result.push(item);
}
});
return result;
}
const arr = [1, [2, [3, [4]]]];
console.log(flatten(arr)); // [1, 2, 3, 4]
使用 reduce 实现
结合 reduce 和递归,可以更简洁地实现扁平化。
function flatten(arr) {
return arr.reduce((acc, val) =>
Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []);
}
const arr = [1, [2, [3, [4]]]];
console.log(flatten(arr)); // [1, 2, 3, 4]
使用 while 循环和扩展运算符
通过循环和扩展运算符逐步展开数组。
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
const arr = [1, [2, [3, [4]]]];
console.log(flatten(arr)); // [1, 2, 3, 4]
使用 toString 方法
如果数组中的元素均为数字或字符串,可以通过 toString 方法快速扁平化。
function flatten(arr) {
return arr.toString().split(',').map(item => Number(item));
}
const arr = [1, [2, [3, [4]]]];
console.log(flatten(arr)); // [1, 2, 3, 4]
使用生成器函数
通过生成器函数实现惰性扁平化,适合处理大型数组。

function* flatten(arr) {
for (const item of arr) {
if (Array.isArray(item)) {
yield* flatten(item);
} else {
yield item;
}
}
}
const arr = [1, [2, [3, [4]]]];
console.log([...flatten(arr)]); // [1, 2, 3, 4]
注意事项
- 如果数组中包含非数组元素(如对象或函数),某些方法可能需要调整。
toString方法仅适用于数字或字符串数组,其他类型会导致数据丢失或错误。






