js实现flat
实现数组扁平化的方法
数组扁平化是指将嵌套的多维数组转换为一维数组。JavaScript 提供了多种实现方式,以下是常见的几种方法:
使用 Array.prototype.flat()
ES2019 引入了 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, item) =>
acc.concat(Array.isArray(item) ? flatten(item) : item), []);
}
const arr = [1, [2, [3, [4]]]];
console.log(flatten(arr)); // [1, 2, 3, 4]
使用 while 循环和 concat
通过循环判断数组中是否还有嵌套数组,不断展开。

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]
使用 Generator 实现
通过生成器函数递归遍历数组,生成扁平化后的序列。
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 方法(仅适用于数字或字符串数组)
将数组转换为字符串后再解析,仅适用于元素为数字或字符串的情况。
function flatten(arr) {
return arr.toString().split(',').map(Number);
}
const arr = [1, [2, [3, [4]]]];
console.log(flatten(arr)); // [1, 2, 3, 4]
注意事项
- 如果数组包含非数组对象(如
null、{}),需要额外处理。 - 递归方法可能导致栈溢出,对于极深层级的数组需谨慎使用。
flat()是 ES2019 新增方法,需考虑兼容性问题。






