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 相关文章推荐
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
javascript使用定时函数实现跳转到某个页面
Dec 25 Javascript
解决JavaScript数字精度丢失问题的方法
Dec 03 Javascript
jQuery插件WebUploader实现文件上传
Nov 07 Javascript
jQuery 的 ready()的纯js替代方法
Nov 20 Javascript
微信小程序的动画效果详解
Jan 18 Javascript
Google 爬虫如何抓取 JavaScript 的内容
Apr 07 Javascript
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 Javascript
JS实现十字坐标跟随鼠标效果
Dec 25 Javascript
vue页面跳转实现页面缓存操作
Jul 22 Javascript
vue循环中点击选中再点击取消(单选)的实现
Sep 10 Javascript
js获取图片的base64编码并压缩
Dec 05 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
javascript读写json示例
2014/04/11 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
JS判断一个数是否是水仙花数
2017/06/11 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
《胖乎乎的小手》教学反思
2014/02/26 职场文书
食堂标语大全
2014/06/11 职场文书
群众路线剖析材料
2014/09/30 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
公司聚餐通知
2015/04/22 职场文书
办公用品质量保证书
2015/05/11 职场文书
单位工作证明范本
2015/06/15 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript