JS中forEach()、map()、every()、some()和filter()的用法


Posted in Javascript onMay 11, 2022

前言

在文章开头,先问大家一个问题:

在Javascript中,如何处理数组中的每一项数据?

有人可能会说,这还不简单,直接一个for循环遍历一下就好了。

是的,确实,这是最常见的做法。

但是,除此之外,ES5还提供了处理数组更加方便的方法,如题。

接下来,我将通过几个简单的实例来具体讲解这几个方法。

一、forEach(),用于遍历数组,无返回值

这里先给出一个数组(以下例子通用):

var arr = [1,-2,3,4,-5];

然后我要做事情的就是,将数组中的每一项翻倍。

arr.forEach(function(item,index,array){
    array[index] = item * 2;
});
console.log(arr);   // [2,-4,6,8,-10]

可以看到,forEach()可以传入一个匿名函数作为参数,而该匿名函数有含有三个参数,其依次代表数组遍历时的当前元素item,数组遍历时的当前元素的索引index,以及正在遍历的数组array。有了这三个参数,可以方便我们做很多事情,比如说示例当中将每一项数组元素翻倍,这时需要用到第一个参数item。但是,仅仅只是将item乘以2可不行,我们还得将其赋值给原来的数组,这时我们就得用到后面两个参数index和array。

根据上述可知,array[index]是全等于item的。

arr.forEach(function(item,index,array){
    console.log(array[index] === item);   // true
});

二、map(),用于遍历数组,返回处理之后的新数组

var newArr = arr.map(function(item,index,array){
    return item * 2;
});
console.log(newArr);   // [2,-4,6,8,-10]

可以看到,该方法与forEach()的功能类似,只不过map()具有返回值,会返回一个新的数组,这样处理数组后也不会影响到原有数组。

三、every(),用于判断数组中的每一项元素是否都满足条件,返回一个布尔值

var isEvery = arr.every(function(item,index,array){
    return item > 0;
});
console.log(isEvery);   // false

可以看到,示例中是要判断数组arr中的元素是否都为正数,很显然不是,所以该方法最终返回false。

四、some(),用于判断数组中的是否存在满足条件的元素,返回一个布尔值

var isSome = arr.some(function(item,index,array){
    return item < 0;
});
console.log(isSome);   // true

可以看到,该方法与every()类似,示例中是要判断数组arr中是否存在负数元素,很显然存在,所以该方法最终返回true。

五、filter(),用于筛选数组中满足条件的元素,返回一个筛选后的新数组

var minus = arr.filter(function(item,index,array){
    return item < 0;
});
console.log(minus);   // [-2, -5]

可以看到,示例中是要筛选出数组arr中的所有负数,所以该方法最终返回一个筛选后的新数组[-2, -5]。

补充: 以上五大方法除了传递一个匿名函数作为参数之外,还可以传第二个参数,该参数用于指定匿名函数内的this指向,例如:

// 只传一个匿名函数
arr.forEach(function(item,index,array){
    console.log(this);  // window
});
// 传两个参数
arr.forEach(function(item,index,array){
    console.log(this);  // [1, -2, 3, 4, -5]
},arr);

兼容性: 由于以上方法均属ES5方法,所以IE8及其以下浏览器均不兼容。

补充小结:

map():有返回值,可以return出来

forEach():没有返回值

filter():返回一个符合func条件的元素数组(并没有改变原数组)

some():返回一个boolean,判断是否有元素是否符合func条件(有一个就行)(并没有改变原数组)

every():返回一个boolean,判断每个元素是否符合func条件(所有都判断)(并没有改变原数组)

重点总结:

① forEach()无返回值,map()和filter()返回新数组,every()和some()返回布尔值
② 匿名函数中this指向默认为window,可通过传第二参数来更改之
③ 五种遍历方法均为ES5方法

总结

到此这篇关于JS中forEach()、map()、every()、some()和filter()用法的文章就介绍到这了!

Javascript 相关文章推荐
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
Apr 25 Javascript
js定时器(执行一次、重复执行)
Mar 07 Javascript
easyui datagrid 键盘上下控制选中行示例
Mar 31 Javascript
JavaScript语言对Unicode字符集的支持详解
Dec 30 Javascript
移动设备web开发首选框架:zeptojs介绍
Jan 29 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
Aug 18 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
在Vue中使用Compass的方法
Mar 02 Javascript
Vue.directive()的用法和实例详解
Mar 04 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
详解Vue的mixin策略
Nov 19 Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
JavaScript中reduce()的用法
May 11 #Javascript
处理canvas绘制图片模糊问题
介绍一下28个JS常用数组方法
May 06 #Javascript
VUE解决跨域问题Access to XMLHttpRequest at
js判断两个数组相等的5种方法
May 06 #Javascript
vue使用watch监听属性变化
Apr 30 #Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
You might like
一些常用的php简单命令代码集锦
2007/09/24 PHP
php输出xml格式字符串(用的这个)
2012/07/12 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
JS模块与命名空间的介绍
2013/03/22 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
Python中bisect的用法
2014/09/23 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
深入理解python try异常处理机制
2016/06/01 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
DOM和JQuery对象有什么区别
2016/11/11 面试题
班组长工作职责
2013/12/25 职场文书
结婚典礼证婚词
2014/01/11 职场文书
节约电力资源的建议书
2014/03/12 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
手机被没收的检讨书
2014/10/04 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang