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 相关文章推荐
文本加密解密
Jun 23 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
Mar 12 Javascript
jQuery实现瀑布流的取巧做法分享
Jan 12 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
JavaScript实现彩虹文字效果的方法
Apr 16 Javascript
javascript实现控制的多级下拉菜单
Jul 05 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
Aug 10 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
Nov 26 Javascript
详解js静态资源文件请求的处理
Aug 01 Javascript
javascript计算渐变颜色的实例
Sep 22 Javascript
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
vue-cli4使用全局less文件中的变量配置操作
Oct 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
php继承的一个应用
2011/09/06 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
PHP读取Excel类文件
2017/05/15 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
jquery 防止表单重复提交代码
2010/01/21 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
javascript中的this详解
2014/12/08 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
Python正则表达式使用经典实例
2016/06/21 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
博士研究生自我鉴定范文
2013/12/04 职场文书
森林防火工作方案
2014/02/14 职场文书
小学教师年度个人总结
2015/02/05 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
倡议书怎么写?
2019/04/11 职场文书
python实现会员信息管理系统(List)
2022/03/18 Python
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python