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 相关文章推荐
jQuery响应鼠标事件并隐藏与显示input默认值
Aug 24 Javascript
JavaScript实现查找字符串中第一个不重复的字符
Dec 29 Javascript
jquery实现页面虚拟键盘特效
Aug 08 Javascript
jQuery模拟淘宝购物车功能
Feb 27 Javascript
vue 添加vux的代码讲解
Nov 30 Javascript
JavaScript中Object值合并方法详解
Dec 22 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
微信小程序的开发范式BeautyWe.js入门详解
Jul 10 Javascript
layui表格分页 记录勾选的实例
Sep 02 Javascript
Vue.js watch监视属性知识点总结
Nov 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 简单日历实现代码
2009/10/28 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
php经典算法集锦
2015/11/14 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Python数据可视化之画图
2019/01/15 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
Python高并发和多线程有什么关系
2020/11/14 Python
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
中国医药集团国药在线:国药网
2017/02/06 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
酒店开业策划方案
2014/06/02 职场文书
小学数学教研活动总结
2014/07/01 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
Python实现Hash算法
2022/03/18 Python