js flat实现
flat 方法的基本概念
flat() 是 JavaScript 数组的一个方法,用于将嵌套数组“扁平化”,即将多维数组转换为一维数组。默认情况下,flat() 只会扁平化一层嵌套,但可以通过参数指定深度。
基本语法
arr.flat([depth])
depth(可选):指定要扁平化的嵌套层数,默认为 1。如果传入Infinity,则会完全扁平化所有嵌套。
使用示例
默认扁平化一层
const arr1 = [1, 2, [3, 4]];
console.log(arr1.flat()); // 输出: [1, 2, 3, 4]
指定扁平化深度
const arr2 = [1, 2, [3, 4, [5, 6]]];
console.log(arr2.flat(2)); // 输出: [1, 2, 3, 4, 5, 6]
完全扁平化
const arr3 = [1, 2, [3, 4, [5, 6, [7, 8]]]];
console.log(arr3.flat(Infinity)); // 输出: [1, 2, 3, 4, 5, 6, 7, 8]
手动实现 flat 方法
如果不支持 flat() 方法(如旧版浏览器),可以手动实现类似功能:

递归实现
function flatten(arr, depth = 1) {
if (depth === 0) return arr.slice();
return arr.reduce((acc, val) => {
return acc.concat(Array.isArray(val) ? flatten(val, depth - 1) : val);
}, []);
}
const arr = [1, 2, [3, 4, [5, 6]]];
console.log(flatten(arr, 2)); // 输出: [1, 2, 3, 4, 5, 6]
迭代实现
function flatten(arr, depth = 1) {
let result = arr.slice();
while (depth-- > 0) {
let flattened = false;
const temp = [];
for (const val of result) {
if (Array.isArray(val)) {
temp.push(...val);
flattened = true;
} else {
temp.push(val);
}
}
result = temp;
if (!flattened) break;
}
return result;
}
const arr = [1, 2, [3, 4, [5, 6]]];
console.log(flatten(arr, 2)); // 输出: [1, 2, 3, 4, 5, 6]
注意事项
- 如果数组中包含空位(如
[1, , 3]),flat()方法会忽略这些空位。 - 手动实现时需要注意性能问题,尤其是对于深度嵌套的大数组。






