首页 > 编程语言 >JavaScript中数组的flatMap方法

JavaScript中数组的flatMap方法

时间:2022-09-24 12:13:06浏览次数:50  
标签:flatMap JavaScript 元素 arr item 数组 id

认识flatMap

flatMap是数组的一个新方法,它会遍历原数组的每一个元素, 并且会为每个元素都执行一次传入的回调函数,最终把所有元素执行回调函数返回的结果压缩成一个新数组,flatMap会返回一个新的数组,不会改变原数组的元素。

回调参数

遍历数组元素的时候,会为每一个元素都执行一次回调函数,可以传入三个参数:

  1. currentValue:当前正在数组中处理的元素。
  2. index:可选的。数组中正在处理的当前元素的索引。
  3. array:可选的。调用flatMap方法的数组。

flatMap能用于在遍历数组期间增加、删除和修改数组元素(也就是修改 items 的数量),当我们需要增加元素时,就在回调函数中返回一个包含多个元素的数组,如果想要删除某一个元素时,就在回调函数中返回一个空数组(注意是空数组,返回空字符串、null或者undefined都不会改变数组items 的数量),如果想要修改元素,则在回调函数中返回一个修改过后的元素即可。

使用

删除数组元素

const arr = [1, 2, 3, 4]
const newArr = arr.flatMap(x => x % 2 === 0 ? [x]: [])
console.log(newArr); // [2, 4]

修改元素

1 const arr = [1, 2, 3, 4]
2 const newArr = arr.flatMap(x => [x * 2])
3 console.log(newArr); // [2, 4, 6, 8]

示例一、flatMap替换map、filter、forEach操作

原始数据

let arr = [
{ id: 1, value:'测试1' },
{ id: 2, value:'测试2' },
{ id: 3, value:'测试3' },
]

将id大于1的数据过滤出来,并且把原本的key为“value”字段改变成“newValue”

[
{id: 20, newValue: '测试2'}
{id: 30, newValue: '测试3'}
]

1、传统思维方式

const newArr = arr.filter(i=>i.id>1).map(c=>({id:c.id*10,newValue:c.value}));

2、使用reduce方法

当然,想达到这个效果方法很多,这里再补充关于reduce方式

const newArr = arr.reduce((curr,item)=>{
return item.id>1?[...curr,{id:item.id*10,newValue:item.value}]:[...curr]
},[])

3、使用flatMap方法

const newArr = arr.flatMap((item)=>item.id>1?[{id:item.id*10, newValue:item.value}]:[]);

示例二、交叉循环

1 var a = [1,2,3]
2 var b = [3,4]
3 a.map(a => (b.map(o => [a,o])))
4 // [ [[1,3],[1,4]], [[2,3],[2,4]], [[3,3],[3,4]] ]a.flatMap(a => (b.map(o => [a,o])))
5 // [ [1,3],[1,4],[2,3],[2,4],[3,3],[3,4] ]
6 // 区别就是flatMap少嵌套了一层

 

标签:flatMap,JavaScript,元素,arr,item,数组,id
From: https://www.cnblogs.com/mo3408/p/16725325.html

相关文章

  • JavaScript Array(数组) 对象
    数组:数组对象是使用单独的变量名来存储一系列的值数组可以用一个变量名存储所有的值,并可以用变量名访问任何一个值数组中每一个元素都有自己的id,方便访问创建数组:三种......
  • 适合新手的 JavaScript
    适合新手的JavaScriptJavaScript与css和html一起是浏览器中的原生语言,它的职责是为网页提供交互性和动态性。它具有一些基本特征,例如:解释:浏览器逐行读取我们的......
  • JavaScript 字符串(String) 对象
    字符串可以使用单引号或者双引号使用位置索引可以访问字符串中的任何字符,字符第一个字符为【0】,依次等可在字符串中使用引号varanswer="Heiscalled'Johnny'";也可......
  • 代码随想录刷题第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
    977.有序数组的平方思路一:暴力解法-先将切片的元素全部转换成正数,再对切片进行排序,最后再遍历切片保存原切片中每个元素的平方值代码ret:=make([]int,len(nums))f......
  • 面试说:聊聊JavaScript中的数据类型
    前言请讲下JavaScript中的数据类型?前端面试中,估计大家都被这么问过。答:Javascript中的数据类型包括原始类型和引用类型。其中原始类型包括null、undefined、boole......
  • JavaScript Number 对象
    JavaScript数字:可以使用也可以不使用小数点来书写极大或极小的数字可通过科学(指数)计数法来写 JavaScript数字均为64位:所有的数字都是由浮点型类型  精度:......
  • 2021 ccpc 威海 D. Period(next数组)
    https://vjudge.net/problem/Gym-103428D题意:给你一个字符串,q次查询,每次查询会将字符串中的一个字符修改为#,求在新串中可以选出几种长度不同的前后缀,使得前后缀相同分析......
  • JavaScript 中的 Web 组件介绍:创建一个 hello-world 的 Web 组件
    JavaScript中的Web组件介绍:创建一个hello-world的Web组件WebComponents是一套不同的技术,允许您创建可重用的自定义html元素。它的伟大之处在于对组件的逻辑和......
  • JavaScript prototype(原型对象)
     对象都会从一个prototype(原型对象)中继承属性和方法。添加属性和方法:想要在对象的构造函数中添加属性或方法使用prototype属性就可以给对象的构造函数添加新的属性......
  • JavaScript 对象
    所有事物都是对象:布尔型可以是一个对象。数字型可以是一个对象。字符串也可以是一个对象日期是一个对象数学和正则表达式也是对象数组是一个对象甚至函数也可以是......