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 相关文章推荐
JS 自动安装exe程序
Nov 30 Javascript
将input file的选择的文件清空的两种解决方案
Oct 21 Javascript
javascript操纵OGNL标签示例代码
Jun 16 Javascript
jquery获得当前html页面源码的方法
Jul 14 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
Aug 03 Javascript
AngularJs  E2E Testing 详解
Sep 02 Javascript
AngularJS实现进度条功能示例
Jul 05 Javascript
JavaScript模拟实现封装的三种方式及写法区别
Oct 27 Javascript
详解vuex结合localstorage动态监听storage的变化
May 03 Javascript
解决node-sass偶尔安装失败的方法小结
Dec 05 Javascript
Node.js动手撸一个静态资源服务器的方法
Mar 09 Javascript
解决layui弹出层layer的area过大被遮挡的问题
Sep 21 Javascript
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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
jQuery使用手册之一
2007/03/24 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
Python编码时应该注意的几个情况
2013/03/04 Python
python中format()函数的简单使用教程
2018/03/14 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Python中常见的数制转换有哪些
2020/05/27 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
python 星号(*)的多种用途
2020/09/21 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
服装销售人员求职自我评价
2013/09/26 职场文书
自我鉴定注意事项
2014/01/19 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
小区物业门卫岗位职责
2014/04/10 职场文书
争先创优心得体会
2014/09/12 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
2014财务年度工作总结
2014/11/11 职场文书
业务员辞职信范文
2015/03/02 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python
Go语言基础函数基本用法及示例详解
2021/11/17 Golang