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

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

时间:2022-11-21 16:09:10浏览次数:60  
标签:flatMap 17 映射函数 JavaScript 展平 item 数组 方法

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

英文 | 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 教程】第六章 数组17—flatMap() :对每个元素执行映射函数并将结果展平_数组_02

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


标签:flatMap,17,映射函数,JavaScript,展平,item,数组,方法
From: https://blog.51cto.com/u_15809510/5874040

相关文章

  • 难题(1761E)
    题目链接题目大一:保证是一个完整图,输出最小操作数。 AC代码:、#include<bits/stdc++.h>#definemod1000000007usingnamespacestd;inte[4010][4010],fa[4010......
  • 篇(17)-Asp.Net Core入门实战-文章管理之文章类别管理(Linq子查询)
    篇(17)-Asp.NetCore入门实战-文章管理之文章类别的管理如果要做一个CMS系统,那么文章管理算是入门,文章管理附带一个类别管理,用来对文章进行类别区分。所以,本章简单讲一些......
  • 17.5 稀疏调拨的内存映射文件--《Windows核心编程》
    原文链接:https://www.likecs.com/show-306421749.html,原文中代码是C++MFC程序,更详细。本文是C语言测试代码。(1)稀疏文件(SparseFile)定义指的是文件中出现大量的0数据,这......
  • 17.1 使用内存映射文件--《Windows核心编程》
    Windows提供了以下三种机制来对内存进行操控虚拟内存:最适合用来管理大量对象数组或者大型数据结构内存映射文件:最适合用来管理大型数据流(通常是文件),以及在同一机器上运......
  • 17.2 内存映射文件的一致性--《Windows核心编程》
    系统允许我们把同一个文件映射到多个视图中,只要映射的是同一个文件映射对象,系统会保证各视图中数据是一致的。例如一个程序修改了一个视图内的内容,那么系统会更新所有其他......
  • 17.3 给内存映射文件指定基地址--《Windows核心编程》
    可以使用MapViewOfFileEx函数,建议系统把文件映射到指定的地址。其他参数与MapViewOfFile相同,最后一个参数pvBaseeAddress指定目标地址。同VirtualAlloc,指定的地址......
  • VMware Workstation Pro 17
    VM17下载地址:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html产品密钥:MC60H-DWHD5-H80U9-6V85M-8280D......
  • 【2022-11-17】中年精神
    20:00“希望”是个有羽毛的东西——它栖息在灵魂里——唱没有歌词的歌曲——永远,不会停息——                       ......
  • NB-IoT天线同轴电缆RG316、RG174、RG178
    NB-IoT的天线电缆可以接多长?常用的线缆有RG316、RG174、RG178,不同的线缆其衰减程度如何?|型号|阻抗(ohms)|内芯(mm)|内绝缘|外绝缘|外径(mm)|衰减(dB)|内芯导体|屏蔽层导体||—|---|......
  • Day17.1:静态与非静态的详解
    静态与非静态静态方法——类方法是以static为关键词,从属于类,与类共生publicclassStudents{//class修饰的是一个类,所以这是一个学生类publicstaticvoidsa......