【JavaScript 教程】第六章 数组17—flatMap() :对每个元素执行映射函数并将结果展平...

本文主要是介绍【JavaScript 教程】第六章 数组17—flatMap() :对每个元素执行映射函数并将结果展平...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

f013158540a3f6318aa8bbebb16d0268.png

英文 | https://www.javascripttutorial.net/

译文 | 杨小爱

在上节,我们学习如何使用 JavaScript Array flat() 方法来展平数组,错过的小伙伴可以点击文章《【JavaScript 教程】第六章 数组16—flat() :递归地将数组展平到指定的深度 》进行学习。

那么,在今天的教程中,我们将一起来学习如何使用JavaScript Array flatMap() 方法,该方法使用映射函数映射数组中的每个元素,并将结果展平为新数组。

JavaScript Array flatMap() 方法介绍

flat() 方法创建一个新数组,其中连接了子数组的元素。

map() 方法创建一个新数组,其元素是映射函数的结果。

flatMap() 方法是 map() 方法后跟深度为 1 的 flat() 方法的组合。

flatMap() 方法首先使用映射函数映射数组中的每个元素,然后将结果展平到一个新数组中。

下面显示了 flatMap() 方法的语法:

 
let newArray = arrayObject.flatMap(callback,thisArg);

flatMap() 方法有两个参数:

1)回调映射函数

回调是映射函数,其语法与 map() 方法中的语法相同:

 
function callback(currentValue [[,index], array]);

2) thisArg 参数

可选的 thisArg 参数是在执行回调时用作 this 的值。

请注意,flatMap() 方法不会修改原始数组。

JavaScript 数组 flatMap() 示例

让我们举一些使用 flatMap() 方法的例子。

1)从句子示例中创建单词

假设我们有以下数组:

 
let sentences = ["JavaScript Array flatMap()", " ", "is", " ", "Awesome"];

以下 map() 函数拆分句子的单词:

 
let words = sentences.map(s => s.split(' '));
console.log(words);

输出:

 
[[ 'JavaScript', 'Array', 'flatMap()' ],[ ' ' ],[ 'is' ],[ ' ' ],[ 'Awesome' ]
]

结果是一个由单词填充的嵌套数组的数组,要展平结果,我们可以在 map() 方法的结果上使用 flat() 方法。 但是,使用 flatMap() 方法会更简洁。

flatMap() 通过映射函数运行数组中的每个句子并将映射结果展平,从而创建一个展平数组:

let sentences = [
"JavaScript Array flatMap()", 
" ", 
"is", 
" ", 
"Awesome"
];
let words = sentences.flatMap(s => s.split(' '));
console.log(words);代码语言:JavaScript  (javascript )

输出:

 
[ 'JavaScript', 'Array', 'flatMap()', '', '', 'is', '', '', 'Awesome' ]

2)在映射示例期间添加和删除元素

flatMap() 方法允许我们在映射期间添加或删除元素,考虑以下示例:

假设我们有以下购物车:

 
let cart = [{
name: 'Smartphone',
qty: 2,
price: 500,
freeOfCharge: false
},
{
name: 'Tablet',
qty: 1,
price: 800,
freeOfCharge: false
}
];

如果客户购买智能手机,我们想给送他们免费的屏幕保护膜。

当客户将智能手机添加到购物车时,我们可以使用 flatMap() 方法将屏幕保护膜添加到购物车,如下所示:

 
let newCart = cart.flatMap(
(item) => {
if (item.name === 'Smartphone') {
return [item, {
name: 'Screen Protector',
qty: item.qty,
price: 5,
freeOfCharge: true}]} else {
return [item];}}
);
console.log(newCart);

购物车将如下所示:

 
[{ name: 'Smartphone', qty: 2, price: 500, freeOfCharge: false },{ name: 'Screen Protector', qty: 2, price: 5, freeOfCharge: true },{ name: 'Tablet', qty: 1, price: 800, freeOfCharge: false }
]

下面使用 reduce() 方法计算购物车中商品的总金额, 它忽略了免费项目,例如屏幕保护膜:

 
const total = newCart.reduce((sum, item) => {
if (!item.freeOfCharge)sum += item.price * item.qty;
return sum;
}, 0);
console.log({total});

输出:

 
{ total: 1800 }

总结

使用 flatMap() 方法通过映射函数运行集合中的每个元素并展平映射的结果,从而创建一个展平的元素数组。

今天的内容就到这里了。

如果您还想学习更多关于数组的内容,请点击下文链接进行学习。

【JavaScript 教程】第六章 数组15—join() :将所有元素连接成一个字符串

【JavaScript 教程】第六章 数组14—reduce() :将数组的元素减少为一个值

【JavaScript 教程】第六章 数组13— forEach() :遍历数组元素

【JavaScript 教程】第六章 数组12— map() :转换数组元素

【JavaScript 教程】第六章 数组11— filter() :过滤数组中的元素

【JavaScript 教程】第六章 数组10— sort() :对数组中的元素进行排序

【JavaScript 教程】第六章 数组09— some() :检查数组中是否至少有一个元素通过了测试

【JavaScript 教程】第六章 数组08— every() :检查数组中的每个元素是否都通过了测试

【JavaScript 教程】第六章 数组07— index() :在数组中定位一个元素

【JavaScript 教程】第六章 数组06— slice() :复制数组元素

【JavaScript 教程】第六章 数组05— splice():删除、插入和替换

【JavaScript 教程】第六章 数组04— JavaScript 队列

【JavaScript 教程】第六章 数组03— Stack :使用 Array 的push()和pop()方法实现堆栈数据结构

【JavaScript 教程】第六章 数组02— Array Length:如何有效地使用数组的长度属性

【JavaScript 教程】第六章 数组01— 介绍JavaScript中的Array类型

学习更多技能

请点击下方公众号

e7a3bec144c79326fb4392e57e12a7d2.gif

b3bb3df6f7c543d83f0cc12a1c211649.png

bb7f22cdf53539b3d0946611377fbb8e.png

这篇关于【JavaScript 教程】第六章 数组17—flatMap() :对每个元素执行映射函数并将结果展平...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/611509

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor