WebGL Tutorial
and more

flatMap

撰写时间:2024-03-15

最新修订:2024-03-15

flatMap

先映射,再展平。原数组不受影响

原型

*[]flatMap
  • callbackcallbackFn
  • *[]thisArg

参数

callbackFn

回调函数。该回调函数接受3个参数。其原型如下:

* | undefinedcallbackFn
  • *element
  • numberindex
  • *[]array
element
当前遍历到的数组元素。
index
当前遍历到的数组索引值。
array
调用flatMap方法的数组实例。

回调函数返回一个数值,以供flatMap方法将其生成为新数组的一个元素。如果回调函数没有显式地返回数值,则默认返回undefined

thisArg
调用flatMap方法的数组实例。可选。

返回值

返回一个先映射再展平后的新的数组。

说明

flatMap方法先映射数组元素,根据回调函数的返回值重新生成一个新的数组。之后,对该数组进行深度为1级的展平。最后,返回该新数组。

例子

基本用法

下面的代码将一个二维数组中的最里面的数组中的第1个元素取反后,将该二维数组展平为一维数组,最后返回展平后的新数组。

let arr = [ [1, 2, 3], [4, 5, 6] ]; let newArr = arr.flatMap(arrElement => { return arrElement.map((element, index) => { if (index === 1) { element = -element; } return element; }); });

当调用arrflatMap方法时,将先后经历两个步骤。

第一步是先映射。在映射过程中,回调函数中的参数arrElement仍是一个数组,此时的回调函数的返回值仍需返回一个数组。因此,我们仍需调用该数组的map方法来继续遍历它。而在第二级遍历的回调函数中,只对索引值为1的元素进行取反后再返回,而对其他元素则原样返回。

映射后的结果为:

[ [1, -2, 3], [4, -5, 6] ]

接着才进行第二步的展平。flatMap方法只能进行1级深度的展平。展平后,最终结果将变为:

[ 1, -2, 3, 4, -5, 6 ]

参见

  1. flat
  2. map

参考资源

  1. ECMA 262: Array Objects