flat() 和 flatMap() 是 JavaScript 中处理数组的两个方法,用于处理嵌套数组,但它们有不同的用途和效果。以下是它们的详细区别:
1. Array.prototype.flat()
-
功能:将嵌套的数组"拉平"成一维数组。
-
语法:
array.flat([depth])
-
depth:可选参数,表示要拉平的深度。默认值是 1。
-
示例:
const arr = [1, [2, [3, [4]]]]; console.log(arr.flat()); // [1, 2, [3, [4]]] console.log(arr.flat(2)); // [1, 2, 3, [4]] console.log(arr.flat(3)); // [1, 2, 3, 4]
-
说明: flat() 只负责将数组拉平,并不会对数组中的元素进行处理。它简单地将嵌套层次减少到指定的深度。
2. Array.prototype.flatMap()
-
功能:对数组中的每个元素应用一个函数,然后将结果"拉平"成一维数组。
-
语法:
array.flatMap(callback[, thisArg])
-
callback:一个函数,用于处理数组中的每个元素,并返回一个数组。
-
thisArg:可选参数,指定 callback 中 this 的值。
-
示例:
const arr = [1, 2, 3, 4]; const result = arr.flatMap(x => [x, x * 2]); console.log(result); // [1, 2, 2, 4, 3, 6, 4, 8]
-
说明: flatMap() 先对每个元素执行 callback 函数,然后将所有返回的数组"拉平"到一维。它常用于需要对数组元素进行映射,并将结果扁平化的场景。
对比总结
- flat():将嵌套的数组按指定深度拉平,主要用于调整数组的层次结构。
- flatMap():对每个元素应用一个映射函数,返回的数组会被"拉平",常用于将嵌套的结果合并成一个平面数组。
实际使用场景
- flat():当你有多层嵌套数组,并且只想简单地减少嵌套深度时使用。
- flatMap():当你需要对数组中的元素进行映射操作,并将结果合并成一个平面数组时使用。