JavaScript 映射器 array.flatMap()
作者:前端小智 发布时间:2024-05-22 10:40:10
前言:
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)
将 number
数组映射到一个新的数组,其中每个数字都被翻倍。
对于需要一对一映射的情况,也就是说,映射后的数组与原始数组的项数相同,array.map()
的效果非常好。
但如果我们需要将一个数组的数字翻倍,同时跳为0的项,该怎么办?
直接使用 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]
array.map()和 array.filter()
可以解决问题,但有没有更简短的方法?
必须滴。使用 array.flatMap()
方法,只需调用一个方法就可以执行映射和删除项目。
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()
函数接受一个回调函数作为参数并返回一个新的映射数组
const mappedArray = array.flatMap((item, index, origArray) => {
// ...
return [value1, value2, ..., valueN];
}[, thisArg]);
回调函数在原数组中的每个iteam
上被调用,有3个参数:当前项、索引和原数组。然后,回调函数返回的数组被扁平化了1层,得到的项目被添加到映射的数组中。
此外,该方法还接受第二个可选参数,表示回调内部的 this
值。
使用array.flatmap()
最简单的方法是将包含项目的数组扁平化
const arrays = [[2, 4], [6]];
const flatten = arrays.flatMap(item => item);
console.log(flatten); // logs [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]
3. 总结
如果想把一个数组映射到一个新的数组中,同时又能控制想在新的映射数组中添加多少项,那么array.flatMap()
方法就是一个好办法。
array.flatMap(callback)
的回调函数被调用,有3个参数:当前迭代的项、索引和原始数组。然后,从回调函数返回的数组在1层深处被扁平化,得到的项目 * 入到所产生的映射数组中。
来源:https://developer.51cto.com/article/700094.html


猜你喜欢
- 概述Python中的增强赋值是从C语言中借鉴出来的,所以这些格式的用法大多和C一致,本身就是对表达式的简写,即二元表达式和赋值语句的结合,比
- 前言最近在做项目的时候遇到一个问题,需要获取一个动态预览的图片的地址,这其实不是什么问题,主要是该图片的路径是写在css的backgroun
- user-define-session-inc.php文件代码:<?php function mysession_open($save
- 第一种: <script language="javascript" type="text/javasc
- 就是在mysql命令行登录的时候加上: --pager=more 参数可以使用linux下的more来分页,很好用
- 1 集合集合可以使用大括号({})或者set()函数进行创建,但是创建一个空集合必须使用set()函数,而不能用{},大括号是用来创建一个空
- 0x01介绍PySocks使您可以通过SOCKS和HTTP代理服务器发送流量。它是SocksiPy的现代分支,具有错误修复和其他功能。0x0
- PHP crypt() 函数定义和用法crypt() 函数返回使用 DES、Blowfish 或 MD5 算法加密的字符串。在不同的操作系统
- MySQL出错代码列表:1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库
- 在生产环境下,有时公司客服反映网页半天打不到,除了在浏览器按F12的Network响应来排查,确定web服务器无故障后。就需要检
- 窗外下着小雨,作为单身程序员的我逛着逛着发现一篇好东西,来自知乎 你都用 Python 来做什么?的第一个高亮答案。到上面去看了看,地址都是
- 在 Internet 连接无处不在的今天,我们忽然有了另外一个需求,离线 Web。Gmail, Google Reader, Zoho 这些
- 分页:/*分页查找数据*/ CREATE PROCEDURE [dbo].[GetRecordSet] @strSql varchar(80
- 先学会文件的读写!比如像以前在学校读书的时候,第一门编程课设计要求是制作学生管理系统。这就需要使用文件来处理(也可以用数据库,但是一般C语言
- PHP 中的 Interface 是一种非常重要的特性,它允许开发人员定义一组规范或者约束,以确保类之间的互操作性和兼容性。在本文中,我们将
- 在计算机中数据有两种特征:类型和长度。所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类。在SQL Server 中每个变量、参数
- 为大家提供了两种有效PyCharm激活方法,第一种PyCharm激活方法是直接输入激活码,一般PyCharm激活使用的人多了会被官方封,所以
- 一、什么是 AJAX ?AJAX = 异步 JavaScript 和 XML。AJAX 是一种用于创建快速 * 页的技术。通过在后台与服务器
- 1. 概述快过年了,刚刚收到了两个消息,一个好消息,一个坏消息。先说好消息,好消息就是微信群里有人要发红包,开心~不过转念一想,前几次的红包
- 如果你还在为python的各种urllib和urlibs,cookielib 头疼,或者还还在为python模拟登录和抓取数据而抓狂,那么来