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 开天辟地入门篇一
Dec 09 Javascript
初学js插入节点appendChild insertBefore使用方法
Jul 04 Javascript
dojo学习第二天 ajax异步请求之绑定列表
Aug 29 Javascript
用javascript判断IE版本号简单实用且向后兼容
Sep 11 Javascript
Jquery获取和修改img的src值的方法
Feb 17 Javascript
JavaScript事件委托实例分析
May 26 Javascript
JS中setTimeout的巧妙用法前端函数节流
Mar 24 Javascript
使用jQuery实现动态添加小广告
Jul 11 jQuery
详解vuex结合localstorage动态监听storage的变化
May 03 Javascript
webpack4的迁移的使用方法
May 25 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
Jan 25 Javascript
微信小程序云函数添加数据到数据库的方法
Mar 04 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
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
php array_intersect()函数使用代码
2009/01/14 PHP
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
PHP文件操作实例总结
2016/09/27 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
javascript if条件判断方法小结
2014/05/17 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
vue跨域解决方法
2017/10/15 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
Python中encode()方法的使用简介
2015/05/18 Python
Python快速从注释生成文档的方法
2016/12/26 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
python制作mysql数据迁移脚本
2019/01/01 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
浅析Python迭代器的高级用法
2020/07/16 Python
python使用yaml 管理selenium元素的示例
2020/12/01 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
农村党支部先进事迹
2014/01/14 职场文书
学生会主席竞聘书
2014/03/31 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL