ES11 新特性 flatMap 方法快速优化数组操作

阅读时长 4 分钟读完

在前端开发中,经常需要对数组进行操作,为此 JavaScript 在 ES11 中新增了一个方法:flatMap()。与 map() 方法类似,flatMap() 方法可以对数组中的每一项进行操作,但 flatMap() 方法具有更强的处理能力,可以在使用了 map() 方法的基础上对数组进行快速优化。

flatMap() 方法的定义

flatMap() 是一个数组方法,其接收一个函数作为参数,该函数将被应用到数组中的每个元素上,生成一个新的数组。与 map() 方法一样,它也会返回一个新的数组,但其特别之处在于,map() 方法可能会返回一个嵌套的数组,而 flatMap() 方法可以将这些嵌套的数组“扁平化”,返回一个一维数组。该方法的完整语法如下:

其中,callback 参数表示要对每个元素执行的函数,该函数同样接收三个参数:

  • currentValue:当前数组元素的值。
  • index(可选):当前元素在数组中的索引。
  • array(可选):原数组本身。
  • thisArg(可选):执行 callback 回调时的 this 上下文。

flatMap() 方法的使用

有时候,我们需要对数组中的每个元素进行操作,例如生成新的数组、移除不必要的元素、筛选元素等等。如果使用 map() 方法,则有可能返回一个嵌套的数组,需要使用 reduce() 等方法来将其扁平化。而使用 flatMap() 方法则可以更加简单地达到目的。比如我们可以利用 flatMap() 方法将字符串数组中的每个元素分割成单词并返回一个单词数组:

可以看到,我们先使用了 split() 方法将每个字符串分割成单词,然后使用 flatMap() 方法将生成的嵌套数组扁平化为一个一维数组。

除了数组扁平化外,flatMap() 方法还可以将数组进行过滤、映射等操作。例如,我们可以使用 flatMap() 方法将多个数组合并成一个数组:

在这个例子中,我们先将三个数组作为元素放入一个数组 [arr1, arr2, arr3] 中,然后使用 flatMap() 将其扁平化,最终得到一个合并后的数组。

需要注意的是,flatMap() 方法只能“扁平化”一个层级的数组。如果要操作嵌套的数组,则需要先使用 map() 方法处理数组,再使用 flatMap() 方法扁平化数组。例如,我们可以使用 flatMap() 方法将多个嵌套数组合并成一个一维数组:

在这个例子中,我们先对每个嵌套数组使用 map() 方法将数组中的每一个元素乘以 2,得到一个新的嵌套数组。然后使用 flatMap() 方法将这个嵌套数组扁平化成一个一维数组。

小结

flatMap() 方法是 JavaScript ES11 中新增的一个数组方法,与 map() 方法类似,用于对数组中的每个元素执行回调函数,但具有更强的操作能力,可以将嵌套数组“扁平化”,生成一个一维数组。与 reduce() 等方法相比,flatMap() 方法更加简便易行,可以用于数组的过滤、映射、合并等操作。需要注意的是,flatMap() 方法只能“扁平化”一个层级的数组,如果需要处理嵌套数组,则需要先使用 map() 方法进行操作。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d6745ca941bf7134c39464

纠错
反馈

纠错反馈