当前位置:网站首页>flatMap() :对每个元素执行映射函数并将结果展平
flatMap() :对每个元素执行映射函数并将结果展平
2022-08-09 02:50:00 【油墨香^_^】
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() 方法通过映射函数运行集合中的每个元素并展平映射的结果,从而创建一个展平的元素数组。
边栏推荐
- dice和iou
- Building PO layered architecture of automated testing framework from 0
- LeetCode_43_字符串相乘
- 【电商运营】不知道怎么做网站优化?这里有你需要知道的一切!
- 【剑指offer65】不适用加减乘除做加法
- 概率模型校准
- Matlab实现异构交通流
- Jenkins environment deployment, (packaging, publishing, deployment, automated testing)
- Kubernetes:(十五)PV与PVC的《恩怨情仇》
- 数字 05 verilog&vivado2018.2零散笔记
猜你喜欢
随机推荐
Kubernetes:(十四)安全机制(一定要做好安全措施哦)
Processing Point Clouds
数字 01 Vivado2018.2安装及实操
LintCode 146. 大小写转换 II
VSCode使用总结
C语言力扣第56题之合并区间。排序+双指针
Likou Brush Question Record 3.1-----977. Square of ordered array
20220526动态规划:不同路径
数字 05 verilog&vivado2018.2零散笔记
【es6】教程 Symbol数据以及迭代器和生成器
Recently, I have seen a lot of people who want to study by themselves or enroll in classes but don’t know how to choose. I will tell you about it today.
腾讯地图获取定位
【剑指offer】二进制中1的个数&&2的幂
【信号去噪】基于Sage-Husa自适应卡尔曼滤波器实现海浪磁场噪声抑制及海浪磁场噪声的产生附matlab代码
一款免费的强大办公工具。
目标检测中mAP计算以及源码解析
独立机器连接cdh的spark集群,远程提交任务(绝对可以成功,亲测了n遍)
C专家编程 第9章 再论数组 9.6 C语言的多维数组
并查集相关知识点
C专家编程 第9章 再论数组 9.1 什么时候数组与指针相同

![[Redis] The core principle of master-slave replication](/img/42/6b0f511d3bcf4b951b556408b021c4.png)






