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 相关文章推荐
Javascript 面向对象 对象(Object)
May 13 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
Nov 18 Javascript
javascript结合CSS实现苹果开关按钮特效
Apr 07 Javascript
javascript实现动态标签云
Oct 16 Javascript
jQuery ajax时间差导致的变量赋值问题分析
Jan 22 Javascript
javascript禁止超链接跳转的方法
Feb 02 Javascript
深入理解vue.js中$watch的oldvalue与newValue
Aug 07 Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
Apr 11 Javascript
vue项目中仿element-ui弹框效果的实例代码
Apr 22 Javascript
jQuery动态生成的元素绑定事件操作实例分析
May 04 jQuery
js实现菜单跳转效果
Dec 11 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
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
简述vue中的config配置
2018/01/23 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
python读取Excel实例详解
2018/08/17 Python
在python中用url_for构造URL的方法
2019/07/25 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
意大利团购网站:Groupon意大利
2016/10/11 全球购物
印度网上药店:1mg
2017/10/13 全球购物
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
幼儿园亲子活动方案
2014/01/29 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
公司领导班子对照材料
2014/08/18 职场文书
2014年老干部工作总结
2014/11/21 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL