JavaScript 面试题
目录

请解释 JavaScript 中的 Array.prototype.flat() 和 Array.prototype.flatMap() 方法的作用和用法。

· 约 5 分钟读完 · 第 157 / 507 章

推荐答案

Array.prototype.flat() 和 Array.prototype.flatMap() 是 JavaScript 中用于处理嵌套数组的两个重要方法。

flat() 方法会创建一个新数组,将原数组中所有子数组拼接起来,并根据指定的深度进行扁平化处理。其基本语法为 arr.flat([depth]),其中 depth 是一个可选参数,用于指定扁平化的深度,默认为 1。如果 depth 为 Infinity,则会完全扁平化数组。

flatMap() 方法首先使用映射函数处理原数组的每个元素,然后将结果扁平化为新数组,其行为类似于 arr.map(...).flat(1)。其基本语法为 arr.flatMap(callback(currentValue[, index[, array]])[, thisArg]),它接受一个回调函数,该回调函数类似于 map 方法中的回调函数,返回一个数组,flatMap() 将会把这些数组展开并连接成一个新数组。

简而言之,flat() 用于扁平化数组,而 flatMap() 用于映射并扁平化数组。

本题详细解读

Array.prototype.flat() 的详细解释

作用

flat() 方法用于将嵌套的多维数组扁平化为一个一维数组。它可以接收一个可选的深度参数 depth,用于指定扁平化的层数。

语法

  • depth (可选):一个指定扁平化层数的数字。默认值为 1。可以使用 Infinity 作为 depth,表示完全扁平化数组。
  • 返回值:一个新的扁平化后的数组。

用法示例

Array.prototype.flatMap() 的详细解释

作用

flatMap() 方法首先使用给定的回调函数映射数组的每个元素,然后将映射产生的新数组扁平化为一个新数组。它等效于 arr.map(callback).flat(1),但效率更高。

语法

  • callback:一个用于产生新数组的函数,接受三个参数:
    • currentValue:当前正在处理的元素。
    • index (可选):当前元素的索引。
    • array (可选):调用 flatMap() 的数组本身。
  • thisArg (可选):执行 callback 时使用的 this 值。
  • 返回值:一个新的扁平化后的数组。

用法示例

关键区别

  • flat() 主要用于扁平化数组,它不改变数组元素的值。
  • flatMap() 主要用于映射和扁平化数组,它会先通过一个回调函数处理原数组元素,然后再扁平化结果。
  • flatMap() 的扁平化深度始终为 1,而 flat() 可以指定不同的扁平化深度。
  • 从效率上来说, flatMap 比 arr.map(...).flat(1) 效率更高。