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 改变CSS样式基础代码
Feb 11 Javascript
js获取指定日期周数以及星期几的小例子
Jun 27 Javascript
javascript中Array()数组函数详解
Aug 23 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
Js动态设置rem来实现移动端字体的自适应代码
Oct 14 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
Oct 28 Javascript
Windows系统下安装Node.js的步骤图文详解
Nov 15 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
vuejs事件中心管理组件间的通信详解
Aug 09 Javascript
详解vue-cli构建项目反向代理配置
Sep 07 Javascript
vue如何实现动态加载脚本
Feb 05 Javascript
javascript递归函数定义和用法示例分析
Jul 22 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
晶体管单管来复再生式收音机
2021/03/02 无线电
php简单提示框alert封装函数
2010/08/08 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
Python实现完整的事务操作示例
2017/06/20 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
教师通用专业自荐书范文
2014/02/11 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
绿色环保标语
2014/06/12 职场文书
个人典型事迹材料
2014/12/30 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
js之ajax文件上传
2021/05/13 Javascript