Map、FlatMap 和 Reduce

Map 作用是生成一个新数组,遍历原数组,将每个元素拿出来做一些变换然后 append 到新的数组中。

  1. [1, 2, 3].map((v) => v + 1)
  2. // -> [2, 3, 4]

Map 有三个参数,分别是当前索引元素,索引,原数组

  1. ['1','2','3'].map(parseInt)
  2. // parseInt('1', 0) -> 1
  3. // parseInt('2', 1) -> NaN
  4. // parseInt('3', 2) -> NaN

FlatMapmap 的作用几乎是相同的,但是对于多维数组来说,会将原数组降维。可以将 FlatMap 看成是 map + flatten ,目前该函数在浏览器中还不支持。

  1. [1, [2], 3].flatMap((v) => v + 1)
  2. // -> [2, 3, 4]

如果想将一个多维数组彻底的降维,可以这样实现

  1. const flattenDeep = (arr) => Array.isArray(arr)
  2. ? arr.reduce( (a, b) => [...a, ...flattenDeep(b)] , [])
  3. : [arr]
  4. flattenDeep([1, [[2], [3, [4]], 5]])

Reduce 作用是数组中的值组合起来,最终得到一个值

  1. function a() {
  2. console.log(1);
  3. }
  4. function b() {
  5. console.log(2);
  6. }
  7. [a, b].reduce((a, b) => a(b()))
  8. // -> 2 1