flat()是JavaScript内置数组方法,用于将嵌套数组拉平为一维数组,默认深度为1,支持Infinity参数递归扁平化任意深度,自动跳过空槽和undefined,并常与map()等方法链式配合使用。

flat() 是 JavaScript 内置的数组方法,用于将嵌套数组“拉平”成一维数组。它默认只扁平化一层,但支持传入深度参数实现**递归扁平化任意维度**(包括不规则嵌套),无需手写递归函数。
基本用法:flat() 默认只展开一层
对二维数组,arr.flat() 等价于 arr.flat(1):
console.log(arr2D.flat()); // [1, 2, 3, 4, [5]]
注意:最内层的 [5] 没被展开,因为默认深度为 1。
递归扁平化:传入 Infinity 或足够大的数字
要彻底展平所有嵌套层级,把参数设为 Infinity 最稳妥:
立即学习“Java免费学习笔记(深入)”;
console.log(deepArr.flat(Infinity)); // [1, 2, 3, 4, 5, 6]
也可以传具体数字(如 flat(3)),但需预估最大嵌套深度;用 Infinity 更安全、更常用。
处理空槽位和空值,flat 自动跳过
flat() 会忽略数组中的空槽(sparse array)和 undefined 元素,不会产生 undefined 占位:
console.log(sparse.flat(Infinity)); // [1, 2, 3, 4]
这和 concat() 或手写递归不同,flat 天然更干净。
结合其他方法一起用(比如过滤后再扁平)
常与 map()、filter() 配合,比如把对象数组中每个 item 的 tags 数组合并成一个标签列表:
{ title: "A", tags: ["js", "web"] },
{ title: "B", tags: ["node"] },
{ title: "C", tags: [] }
];
const allTags = posts
.map(post => post.tags)
.flat();
console.log(allTags); // ["js", "web", "node"]


















