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 parseInt(&quot;08&quot;)未指定进位制问题
Jun 19 Javascript
获取表单控件原始(初始)值的方法
Aug 21 Javascript
jQuery实现跨域iframe接口方法调用
Mar 14 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
Mar 27 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
Nov 24 Javascript
全面解析Bootstrap排版使用方法(文字样式)
Nov 30 Javascript
canvas实现图像放大镜
Feb 06 Javascript
axios拦截设置和错误处理方法
Mar 05 Javascript
vue-cli 构建骨架屏的方法示例
Nov 08 Javascript
vue-cli3 DllPlugin 提取公用库的方法
Apr 24 Javascript
js实现继承的方法及优缺点总结
May 08 Javascript
详解JavaScript执行模型
Nov 16 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中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
简单的php中文转拼音的实现代码
2014/02/11 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
php输出图像的方法实例分析
2017/02/16 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
php实现微信支付之企业付款
2018/05/30 PHP
javascript 写类方式之二
2009/07/05 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
python显示天气预报
2014/03/02 Python
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
python的flask框架难学吗
2020/07/31 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
公司培训心得体会
2014/01/03 职场文书
绿色环保演讲稿
2014/05/10 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
法人代表资格证明书
2015/06/18 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书