此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
Array.prototype.flat()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2020年1月.
flat() 方法创建一个新的数组,并根据指定深度递归地将所有子数组元素拼接到新的数组中。
In this article
尝试一下
const arr1 = [0, 1, 2, [3, 4]];console.log(arr1.flat());// expected output: Array [0, 1, 2, 3, 4]const arr2 = [0, 1, [2, [3, [4, 5]]]];console.log(arr2.flat());// expected output: Array [0, 1, 2, Array [3, Array [4, 5]]]console.log(arr2.flat(2));// expected output: Array [0, 1, 2, 3, Array [4, 5]]console.log(arr2.flat(Infinity));// expected output: Array [0, 1, 2, 3, 4, 5]语法
js
flat()flat(depth)参数
depth可选指定要提取嵌套数组的结构深度,默认值为 1。
返回值
一个新的数组,其中包含拼接后的子数组元素。
描述
flat() 方法属于复制方法。它不会改变this 数组,而是返回一个浅拷贝,该浅拷贝包含了原始数组中相同的元素。
如果待展开的数组是稀疏的,flat() 方法会忽略其中的空槽。例如,如果depth 是 1,那么根数组和第一层嵌套数组中的空槽都会被忽略,但在更深的嵌套数组中的空槽则会与这些数组一起保留。
flat() 方法是通用的。它只需要this 值具有length 属性和整数键属性即可。但是,如果要展开元素,则它们必须是数组。
示例
>展平嵌套数组
js
const arr1 = [1, 2, [3, 4]];arr1.flat();// [1, 2, 3, 4]const arr2 = [1, 2, [3, 4, [5, 6]]];arr2.flat();// [1, 2, 3, 4, [5, 6]]const arr3 = [1, 2, [3, 4, [5, 6]]];arr3.flat(2);// [1, 2, 3, 4, 5, 6]const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];arr4.flat(Infinity);// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]在稀疏数组上使用 flat()
flat() 方法删除数组中的空槽:
js
const arr5 = [1, 2, , 4, 5];console.log(arr5.flat()); // [1, 2, 4, 5]const array = [1, , 3, ["a", , "c"]];console.log(array.flat()); // [ 1, 3, "a", "c" ]const array2 = [1, , 3, ["a", , ["d", , "e"]]];console.log(array2.flat()); // [ 1, 3, "a", ["d", empty, "e"] ]console.log(array2.flat(2)); // [ 1, 3, "a", "d", "e"]在非数组对象上调用 flat()
flat() 方法读取this 的length 属性,然后访问每个整数索引。如果元素不是数组,则直接将其附加到结果中。如果元素是数组,则根据depth 参数进行展开操作。
js
const arrayLike = { length: 3, 0: [1, 2], // 嵌套的类数组对象不会被展平 1: { length: 2, 0: 3, 1: 4 }, 2: 5,};console.log(Array.prototype.flat.call(arrayLike));// [ 1, 2, { '0': 3, '1': 4, length: 2 }, 5 ]规范
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype.flat> |