JS之map、forEach、filter

以实际真实实例解释map、filter、some、forEach的使用方式 以实际真实实例解释map、filter、some、forEach的使用方式 以实际真实实例解释map、filter、some、forEach的使用方式 立即下载
Array.prototype.map
一、map()概念

定义:map()创建一个新数组,其中的元素是原数组元素调用一个函数处理后的结果。

  • 会按照原数组的顺序处理元素。
  • 不会对空数组进行检测。
  • “创建”,也就是说它不会改变原数组的内容。
  • 处理数组时,数组元素的范围是在 callback 方法第一次调用之前确定。在 map()执行过程中:原数组中新增加的元素将不会被 callback 访问到;若已经存在的元素被改变或删除了,则它们的传递到 callback 的值是 map()遍历到它们的那一时刻的值;而被删除的元素将不会被访问到。
  • 当不打算使用返回的新数组,或没有从回调函数中返回值时,不建议用map()。
  • 没有办法中止或者跳出map() 循环,即不可用return、break。
  • 使用箭头函数,thisArg 参数会被忽略。
二、语法

array.map(function(currentValue, index, arr), thisValue)

  • currentValue: 必选,当前元素的的值。
  • index: 可选,当前元素的索引.
  • arr: 可选,当前元素所属的数组对象。
  • thisValue: 可选,对象作为该执行回调时使用,传递给函数,用作 “this” 的值。如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
三、举个简单的栗子
var arr = [1,2,3,4,5];
var map01 = arr.map(x=>x*x);
console.log(map01);  //(5) [1, 4, 9, 16, 25]
四、易错的例子

【MDN】map 方法中的 callback 函数只有一个参数是必需的,就是正在被遍历的当前数组元素本身。但这并不意味着 map 只给 callback 传了一个参数。这个思维惯性可能会让我们犯一个很容易犯的错误。看这个例子:

["1", "2", "3"].map(parseInt);

结果是[1,NaN,NaN],而不是[1,2,3]!!

这是因为parseInt函数是有两个参数的,第一个是要转为整数的表达式,第二个是转换的基数(一个在2~36范围内的数),而在这里第二个参数本来是回调函数中的index参数。

parseInt(string, radix) -> map(parseInt(value, index))

first iteration (index is 0): parseInt(“1”, 0); // 忽略0,结果:1

second iteration (index is 1): parseInt(“2”, 1); // 不可能有1进制,结果:NaN

third iteration (index is 2): parseInt(“3”, 2); // 二进制得不到3,结果:NaN

解决办法:

  • 写一个在内部已经指定了parseInt方法转换进制的函数;
  • 使用箭头函数语法,其实就是为parseInt()指定只有一个参数
['1', '2', '3'].map( str => parseInt(str) );
  • 改为使用number(),但要注意二者的区别。
五、兼容旧环境

map被添加到第5版的ECMA-262标准中;因此,它可能不存在于标准的所有实现中。可以通过在脚本开头插入以下代码来解决此问题
查看MDN

Array.prototype.forEach()
一、概念

forEach() 方法对数组的每个元素执行一次提供的函数。

  • 升序为数组中含有效值的每一项执行一次callback函数。
  • 那些已删除或者未初始化的项将被跳过。
  • 同样不会改变原数组的值(但是callback可能会改变原数组)。
  • 总是返回 undefined 值,并且不可链式调用!
  • 遍历的范围在第一次调用 callback 前就会确定。调用 forEach 后添加到数组中的项不会被 callback 访问到。如果已经存在的值被改变,则传递给 callback 的值是 forEach 遍历到他们那一刻的值。已删除的项不会被遍历到。如果已访问的元素在迭代时被删除了(例如使用 shift()),之后的元素将被跳过。
  • 没有办法中止或者跳出 forEach() 循环,即不可用return、break。
  • 使用箭头函数,thisArg 参数会被忽略。
二、语法
array.forEach(callback(currentValue, index, array) {
  // do something
}, thisArg)

参数含义与map()的相同

三、例子

来看一个迭代时被删除的例子:

var words = ['one', 'two', 'three', 'four'];
words.forEach(function(word) {
  console.log(word);
  if (word === 'two') {
    words.shift();
  }
}); 
// one two four

因为第二项被删除,后面的项都往前移了,three变成刚刚已经遍历过的索引为1的项,被跳过。

使用箭头函数的例子:

var arr = [1, 2, 3];

arr.forEach((v, i, arr) => {   //或用 map
  console.log(this);
}, arr)

// window
// window
// window
四、兼容旧版本

forEach 是在第五版本里被添加到 ECMA-262 标准的;这样它可能在标准的其他实现中不存在,可以在调用 forEach 之前 插入下面的代码,在本地不支持的情况下使用 forEach()。该算法是 ECMA-262 第5版中指定的算法。查看MDN

map与forEach的区别

由上可以看到,它们基本上可以互换。最主要的区别在于,map()会分配内存空间存储新数组并返回,不会改变原来的数组,而forEach()不返回,但允许callback更改原始数组的元素。

Array.prototype.filter()
一、概念

定义:filter() 方法创建一个新数组,其包含通过所提供函数实现的测试的所有元素。

  • 返回一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
  • 不会改变原数组。
  • 遍历的元素范围在第一次调用 callback 之前就已经确定了。在调用 filter 之后被添加到数组中的元素不会被 filter 遍历到。如果已经存在的元素被改变了,则他们传入 callback 的值是 filter 遍历到它们那一刻的值。被删除或从来未被赋值的元素不会被遍历到。
二、语法[MDN]
var newArray = arr.filter(callback(element, index, array), thisArg)
  • callback: 用来测试数组的每个元素的函数。返回 true 表示该元素通过测试,保留该元素,false 则不保留。
  • element: 数组中当前正在处理的元素。
  • index: 可选,正在处理的元素在数组中的索引。
  • array: 可选,调用了 filter 的数组本身。
  • thisArg: 可选,执行 callback 时,用于 this 的值。否则,callback 的 this 值在非严格模式下将是全局对象,严格模式下为 undefined。callback 函数最终观察到的 this 值是根据通常函数所看到的 "this"的规则确定的。
三、简单的例子
var f = [1, 2, 3, 4].filter(function(f) {
  return f >= 3;
});
console.log(f);
// [3, 4]
四、兼容旧版本

filter 被添加到 ECMA-262 标准第 5 版中,因此在某些实现环境中不被支持。可以把下面的代码插入到脚本的开头来解决此问题,该代码允许在那些没有原生支持 filter 的实现环境中使用它。该算法是 ECMA-262 第 5 版中指定的算法。查询MDN

Array.prototype.some()&Array.prototype.every()

那顺便讲一下some()和every()吧hhh~

一、语法
array.some(function(currentValue,index,arr),thisValue)
array.every(function(currentValue,index,arr),thisValue)

同样也只有currentValue是必需的,含义参考以上方法的参数含义,很好理解啦。

二、概念
  • 两个方法都返会布尔值。some()测试数组中是否存在某个元素符合回调函数,找到这个元素之后返回true,并且不会再继续测试之后的元素,否则返回false。every()测试数组中是否所有元素都符合回调函数,若找到一个元素不符合,则返回false,并且不再测试之后的元素,否则返回true。
  • 两个方法都不会改变原数组。
  • 两个方法都不会对空数组进行检测。
  • 在es5时才被加入为标准,要考虑兼容问题(IE、firefox)
MySQL安装最后启动报错--Job for mysqld.service failed because the control process exited with error code. See MySQL安装最后启动报错: [root@localhost mysql]# systemctl start mysqld Warning: mysqld.service changed on disk. Run 'systemctl daemon-reload' to reload units. Job for mysqld.service failed because the control process exited with error code. See "systemctl status m 阅读详情

相关推荐

Keil调试技巧:3种方法查看Cortex-M4的SCB寄存器(含CPUID内存映射解析)

本文详细介绍了在Keil MDK中查看Cortex-M4内核SCB寄存器的三种实战方法:使用Watch窗口进行符号化观察、通过Memory窗口直接查看物理内存映射,以及利用SFR寄存器浏览器解析位域信息。文章重点解析了CPUID寄存器的内存映射地址(0xE000ED00)及其位域含义,帮助开发者深入理解处理器身份识别与底层调试技巧,提升嵌入式系统调试效率。

h6i7j8的博客 569

js三种遍历数组的方法:map、forEach、filter

js遍历数组的方法:map、forEach、filter

lemon今天学习了吗?的博客 8997

MuJoCo柔性体仿真实战:从FlexComp建模到自定义模型导入

柔性体仿真是机器人交互研究中不可或缺的一环,MuJoCo作为高精度物理求解器,凭借高效的求解速度与批量并行能力,成为强化学习与软体抓取任务的热门选择。其FlexComp机制将连续材料离散为粒子-约束系统,以较低建模成本模拟布料、软组织等形变行为,相比Gazebo等平台更具实时性与可扩展性。技术价值体现在自定义柔性体建模与导入流程中:通过XML配置网格密度、间距与材料参数,即可生成贴合任务需求的软体垫子或硅胶抓手。在柔性抓取、颗粒抓手、医疗仿真等场景中,该方法能快速构建可训练的环境。围绕环境搭建、FlexCo

weixin_29045585的博客 159

JS中map()、forEach()、filter()函数

map()和forEach()是JavaScript中常用的数组方法,它们都可以用于遍历数组并对每个元素执行相应的操作。filter()方法是JavaScript中的一个数组方法,用于从数组中过滤出符合特定条件的元素,并返回一个新数组。

christmassss的博客 876

Vectorless dynamic动态功耗分析——Voltus

power 计算工具会根据设计信息和用户提供的activity和switching约束来生成虚拟的worst-case的power vector,难点在于哪些instances视为switching,在没有仿真的前提下如何确定开关的时间,使用timing文件(TWF)

qq_44347276的博客 2790

AM驱动架构—优质Mini-LED显示技术解决方案

(VR)和增强现实(AR)设备:MiniLED背光驱动方案适用于虚拟现实和增强现实设备中的显示技术,通过高亮度和高对比度的显示效果,创造更逼真的虚拟体验此外,MiniLED背光还能够实现更快的响应速度,减少图像残影,使得用户的动作在虚拟环境中更加流畅自然。以其出色的性能和广泛的应用前景备受关注是实现MiniLED显示效果的重要环节。1)更高的亮度和对比度:尺寸更小,可以在同样面积的显示屏上配置更多的LED,并且通过独立控制每一个MiniLED,可以实现更高的亮度和更细致的对比度,使得显示画面更加鲜明清晰。

isweekDN的博客 2763

js中forEach、filter、map的区别

forEach、filter、map都可以遍历数组,那么三者有什么区别? 区别: 1.forEach遍历数组全部元素,利用回调函数对数组进行操作,不会返回新的数组,return只用于控制循环是否跳出当前循环; filter返回一个新的数组,filter方法需要在循环的时候判断一下是true还是false,是true才会返回这个元素; map根据当前数组映射出一个新的数组,返回新的被改变过值之后的数组,需要return。 2.forEach主要用于改变当前数组里面的值,比如: let arrOne = [

青春正在燃烧的博客 5880

ANSYS ACT插件开发实战指南:从IronPython脚本到XML界面设计

本文提供了一份详尽的ANSYS ACT插件开发实战指南,重点讲解如何利用IronPython脚本实现仿真自动化,并通过XML设计用户友好的向导界面。内容涵盖从环境搭建、脚本编写(如自动创建材料)、界面控件绑定到调试打包的全流程,旨在帮助仿真工程师和团队负责人将重复性工作流程标准化,显著提升ANSYS软件的使用效率。

weixin_29310605的博客 452

js数组迭代之forEach、map、reduce、filter

js数组迭代之forEach、map、reduce、filter

qq_51929595的博客 1278

基于相位检测与锁相环的DIY超声波风速仪设计与实现

相位检测是信号处理中的一项基础技术,它通过测量两个周期信号之间的相位差来获取信息。其核心原理在于,当信号在介质中传播时,外部因素(如风速)会改变其传播速度,从而导致接收端信号的相位发生偏移。锁相环(PLL)是实现高精度相位检测的关键电路,它能动态调整本地振荡器的频率,以跟踪并锁定输入信号的相位,从而将微小的相位变化转换为易于测量的电压信号。这项技术的工程价值在于其对电路精度要求相对较低,鲁棒性好,非常适合低成本、高灵敏度的测量应用。在气象监测、工业传感和消费电子等领域,相位检测技术被广泛用于风速风向测量、位

weixin_29540599的博客 387

Arduino ESP32 Web服务器从microSD卡读取

Arduino ESP32 Web服务器从microSD卡读取 将网页内容放到SD卡中,当有客户端数据请求时,从SD卡读取信息进行发送,比起SPIFFS文件系统,更节约板上的硬件资源。 SD卡接线说明 ESP32----- SD D5(GPIO 5)-----CS D18(GPIO 18)-----SCK D19(GPIO 19)-----MISO D23()GPIO 23-----MOSI 文件放置 需要把文件放置到SD卡的根目录下。注意SD卡的格式FAT32格式。 实例代码 /*

perseverance51博客 1433

JS遍历数组的三种方法:map、forEach、filter

前端对数组进行遍历、处理,JS自带的遍历方法有很多种,往往不加留意,就可能导致知识混乱的现象。js原生自带的常用的对数组遍历处理的方法,分别为:map、forEach、filter。 <1>、Js自带的map()方法 1.方法概述   map()方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组 var newArray = ["1","2","3"].map(function(e,i,arr){return parseInt(e,10)}) map中回调函数中的e参数为:

IT_bar的博客 1396

在blender中安装vtk插件

Blender 是一个开源的、功能强大的3D计算机图形软件,广泛用于创建动画片、视觉效果、艺术作品、3D打印模型、互动3D应用程序和视频游戏。Blender 是由 Blender 基金会开发和维护的,具有丰富的功能和灵活的扩展性。在github上下载zip插件。

如果想成为中心,那么就到中心去吧。 294

JavaScript 中 forEach、map、filter 终极篇

只会在已经赋值的索引上被调用,对于那些已经被删除或者从未被赋值的索引不会被调用。的项时,整个数组的第一个项被移除了,这导致所有剩下的项上移一个位置。方法创建一个数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。函数只需要接受一个参数,就是正在被遍历的数组元素本身。函数时,会给它传递三个参数:当前正在遍历的元素,元素索引,原数组本身.方法创建一个新数组,其包含通过所提供函数实现的测试的所有元素。若已经存在的元素被改变或删除了,则它们的传递到。方法执行的过程中:原数组中新增加的元素将不会被。

2401_87288855的博客 1810

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

js数组中一些实用的方法(forEach,map,filter,find)

虽互不曾谋面,但希望能和你成为笔尖下的朋友以读书,技术,生活为主,偶尔撒点鸡汤不作,不敷衍,意在真诚吐露,用心分享点击左上方,可关注本刊(点击绿色图标,可收听音频)撰文| 川川VX-I...

itclanCoder 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JS中map、forEach 、filter、some、every的使用及区别

一、背景介绍 在前端代码中总能见到some、map、filter等字段,这些字段具体是什么含义,怎么使用,又有什么区别呢? JS中常常需要对数组进行遍历、迭代操作。而我们常用的就是for语句对数组进行迭代。然而在ES5已经为数组定义了5个迭代的方法,分别是:map、forEach 、filter、some、every,下面讲讲它们的具体作用。 二、方法详解 1)map 定义和用法 map() 方法返回一个新数组,新数组中的元素为原始数组元素调用函数处理后的值。 map() 方法按照原始数组元素顺序依次处理元

海蒂 2760

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Javascript】JS遍历数组的三种方法:map、forEach、filter

前言   近一段时间,因为项目原因,会经常在前端对数组进行遍历、处理,JS自带的遍历方法有很多种,往往不加留意,就可能导致知识混乱的现象,并且其中还存在一些坑。前端时间在ediary中总结了js原生自带的常用的对数组遍历处理的方法,分别为:map、forEach、filter,在讲解知识点的同时,会类比相识的函数进行对比,这样会有助于思考方法的利与弊。 ************...

ass201295的专栏 739

JavaScript中filter、map、forEach三者的区别

filter 语法: callback用来测试数组的每个元素的函数。返回 true 表示该元素通过测试,保留该元素,false 则不保留。它接受以下三个参数: 1.element ,数组中当前正在处理的元素。 2.index ,正在处理的元素在数组中的索引。 3.array可选 ,调用了 filter 的数组本身。 返回值:一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。 var newArray = arr.filter(callback(element[,

m0_66333916的博客 1721

JavaScript 中 map、forEach、reduce、filter 之间的区别

下面案例可供参考以上就是今天要讲的内容,本文仅仅简单介绍了map、forEach、reduce、filter 之间区别,而JavaScript 提供大量能使我们快速便捷地处理数据的函数和方法。

唐璜Taro的博客 1128

JS JavaScript中的forEach()、map()和filter()的区别

【代码】JS JavaScript中的forEach()、map()和filter()的区别。

weixin_67271921的博客 298

js数组forEach map filter方法

forEach方法中的function回调支持三个参数,第一个是遍历的数组内容,第二个是对应的数组索引,第三个是数组本身 [].forEach(function(value,index,array){     //... }); 对比jQuery的$.each()方法: $.each([],function(index,value,array){     //... });

kongjunchao159的博客 2918

js数组遍历数组map(),forEach()及filter()

共同点: 1.都是循环遍历数组中的每一项。 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input。 3.匿名函数中的this都是指Window。 4.只能遍历数组 1.forEach() //没有返回值。 let arr = [] //原数组 arr.forEach(function(value...

qq_40644829的博客 1万+

js中forEach、map、reduce、filter函数

1、forEach语法: forEach是ES5扩展的语法,可以使用他遍历数组、对象,但是在forEach中不支持continue、break关键字,forEach中可以使用return来跳出当次循环,相当于continue。我们看几个实例: 1)forEache遍历数组: ...

赶路人儿 2101

JavaScript 中 forEach、map、filter 详细

没有时间?直接看重点! 1、forEach 和 map 能实现的功能相似 2、forEach 、 map、filter 都能实现对原数组的修改 3、forEach 没有返回值,map 有返回值,filter 有返回值 forEach forEach() 方法对数组的每个元素执行一次提供的函数。 语法: array.forEach(callback(currentVal, index, arr...

weixin_34352005的博客 91

javascript中什么时候使用map、foreach 和 filter

map:如果你想转换数组中的每个元素,并需要一个新的数组来存储这些转换后的元素,那么使用 map 是合适的。forEach:如果你只需要对数组中的每个元素执行一个操作(如打印、日志记录等),而不需要返回任何值或创建新数组,那么 forEach 是最佳选择。filter:当你需要根据某些条件从数组中筛选出元素,并创建一个只包含满足条件的元素的新数组时,应该使用 filter。

alive_new的博客 428

js map, reduce, forEach, filter的一般实现

js map, reduce, forEach, filter的一般实现 map(映射), reduce(规约), forEach(遍历), filter(过滤),它们都是高阶函数,都是以传入不同的函数来以不同的方式操作数组元。 1> map function map(array, func) { var res = []; for (var i = 0, len = array

Kylin的专栏 2985
上一篇: js闭包
下一篇: JS之for...in与for...of
YumEllen
博客等级 码龄9年 4粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值