更好用的map函数|更好用的map函数 flatMap
更智能的 JavaScript 映射器:array.flatMap()
原文: https://dmitripavlutin.com/ja...
array.map()
是一个非常有用的映射器函数:它接受一个数组和一个映射器函数,然后返回一个新的映射数组。但是,还有一个替代方案
array.map()
:(array.flatMap()
从 ES2019 开始可用)。此方法使您能够映射,还可以在生成的映射数组中删除甚至添加新项目。1.更智能的映射器 有一个数字数组,你将如何创建一个项目加倍的新数组?
使用该
array.map()
函数是一个很好的方法:const numbers = [0, 3, 6];
const doubled = numbers.map(n => n * 2);
console.log(doubled);
// logs [0, 6, 12]
numbers.map(number => 2 * number)
将数组映射numbers
到一个新数组,其中每个数字都加倍。对于需要一对一映射的情况,这意味着映射的数组将具有与原始数组相同数量的项目,
array.map()
效果很好。但是,如果您需要将数组的数量加倍并从映射中跳过零怎么办?
直接使用
array.map()
是不可能的,因为该方法总是创建一个映射数组,其项目数与原始数组相同。但是您可以使用array.map()
和的组合array.filter()
:const numbers = [0, 3, 6];
const doubled = numbers
.filter(n => n !== 0)
.map(n => n * 2);
console.log(doubled);
// logs [6, 12]
doubled
数组现在包含numbers
乘以 2 的项,并且也不包含任何零。好的,映射和过滤器数组的
array.map()
组合array.filter()
。但是有更短的方法吗?是的!感谢
array.flatMap()
方法,您只需一个方法调用即可执行映射和删除项目。以下是如何使用
array.flatMap()
返回一个新的映射数组,其中项目加倍,同时过滤零0
:const numbers = [0, 3, 6];
const doubled = numbers.flatMap(number => {
return number === 0 ? [] : [2 * number];
});
console.log(doubled);
// logs [6, 12]
通过仅使用 ,
numbers.flatMap()
您可以将一个数组映射到另一个数组,但也可以跳过映射中的某些元素。让我们更详细地了解它是如何
array.flatMap()
工作的。2.array.flatMap ()
array.flatMap()
function 接受一个回调函数作为参数并返回一个新的映射数组:const mappedArray = array.flatMap((item, index, origArray) => {
// ...
return [value1, value2, ..., valueN];
}[, thisArg]);
回调函数在原始数组中的每个 itam 上调用,带有 3 个参数:当前项、索引和原始数组。回调返回的数组随后被展平 1 级深度,并将结果项添加到映射数组中。
此外,该方法接受第二个可选参数,指示
this
回调内部的值。您可以使用的最简单的方法
array.flatMap()
是将包含项目作为数组的数组展平:const arrays = [[2, 4], [6]];
const flatten = arrays.flatMap(item => item);
console.log(flatten);
// logs [2, 4, 6]
在上面的示例
arrays
中包含数字数组:[[2, 4], [6]]
. 调用arrays.flatMap(item => item)
将数组展平为[2, 4, 6]
.但
array.flatMap()
除了简单的展平之外,还可以做更多的事情。通过控制从回调返回的数组项的数量,您可以:- 通过返回一个空数组从结果数组中删除项目
[]
- 通过返回具有一个新值的数组来修改映射项
[newValue]
- 或通过返回具有多个值的数组来添加
[newValue1, newValue2, ...]
新项目: .
0
:const numbers = [0, 3, 6];
const doubled = numbers.flatMap(number => {
return number === 0 ? [] : [2 * number];
});
console.log(doubled);
// logs [6, 12]
让我们更详细地了解上面的示例是如何工作的。
[]
如果当前项目是 ,则回调函数返回一个空数组0
。这意味着当被展平时,空数组[]
根本没有提供任何价值。如果当前迭代项不为零,则
[2 * number]
返回。当[2 * number]
数组被展平时,只有2 * number
被添加到结果数组中。您还可以使用
array.flatMap()
来增加映射数组中的项目数。例如,以下代码片段通过添加两倍和三倍的数字将一个数字数组映射到一个新数组:
const numbers = [1, 4];
const trippled = numbers.flatMap(number => {
return [number, 2 * number, 3 * number];
});
console.log(trippled);
// logs [1, 2, 3, 4, 8, 12]
三、结论
array.flatMap()
如果你想将一个数组映射到一个新数组,方法是要走的路,但也可以控制你想添加多少项到新的映射数组。的回调函数
array.flatMap(callback)
使用 3 个参数调用:当前迭代项、索引和原始数组。然后从回调函数返回的数组在 1 级深度展平,并将生成的项插入到生成的映射数组中。【更好用的map函数|更好用的map函数 flatMap】请注意,如果您只想将单个项目映射到单个新值,请尽量使用标准
array.map()
.推荐阅读
- 从蓦然回首到花开在眼前,都是为了更好的明天。
- 如何更好的去学习
- 厨房装修如何选择水槽(一个干净好用的厨房,从这里开始。)
- 很多网红在用的素颜霜,你知道它是属于护肤品还是化妆品吗()
- 娃娃菜比大白菜更有营养更好吃(烂的大白菜可以剥成娃娃菜?)
- “送出”|“送出” "能用" 『又不好用的东西』
- 唯有努力才能拥有更好的人生
- echart|echart 双轴图开发
- 遇见孩子,遇见更好的自己
- 一般模型化关系——从模型是什么到如何起作用的基本答案