Array.prototype.flat()

基线 广泛可用

此功能已得到良好确立,并且可在许多设备和浏览器版本中使用。它自以下日期起在各个浏览器中都可用 2020 年 1 月.

flat() 方法是 Array 实例的方法,它创建一个新数组,其中包含所有子数组元素,并将其递归连接到指定深度。

试一试

语法

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() 方法读取 thislength 属性,然后访问每个键为小于 length 的非负整数的属性。如果元素不是数组,则将其直接追加到结果中。如果元素是数组,则根据 depth 参数将其展平。

js
const arrayLike = {
  length: 3,
  0: [1, 2],
  // Array-like objects aren't flattened
  1: { length: 2, 0: 3, 1: 4 },
  2: 5,
  3: 3, // ignored by flat() since length is 3
};
console.log(Array.prototype.flat.call(arrayLike));
// [ 1, 2, { '0': 3, '1': 4, length: 2 }, 5 ]

规范

规范
ECMAScript 语言规范
# sec-array.prototype.flat

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅