浅谈javascript 迭代方法


Posted in Javascript onJanuary 21, 2015

ECMAScript5为数组定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象(即影响this的值)。传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象本身。根据使用方法的不同,这个函数执行后的返回值可能会也可能不会影响方法的返回值。这5个迭代方法是:

五个迭代方法 都接受两个参数:要在每一项上运行的函数 和 运行该函数的作用域(可选)

        every():对数组中的每一项运行给定函数。如果函数对每一项都返回true,则返回true。
        filter():对数组中的每一项运行给定函数。返回该函数会返回true的项组成的数组。
        forEach():对数组中每一项运行给定函数。该函数没有返回值。
        map():对数组中每一项运行给定函数。返回每次函数调用的结果组成的函数。
        some():对数组中每一项运行给定函数。如果函数对 任一项返回true,则返回true

以上所有的方法都不会修改数组中包含的值。

在上面的方法中,every()和some()非常相似,它们都用于查询数组中的项是否满足某个条件。对于every()方法来说,传入的函数必须对每一项都返回true,这个方法才返回true。否则,它就返回false。而some()方法则是只要传入的函数对数组的某一项返回true,就会返回true。例如:

var nums = [1,2,3,4,5,4,3,2,1];
var result = nums.every(function(item, index, array){
 return (item > 2);
})
console.info(result);

上面的代码会在控制台中打印false。

var nums = [1,2,3,4,5,4,3,2,1];
var result = nums.some(function(item, index, array){
 return (item > 2);
})
console.info(result);

上面的代码会在控制台中打印true。

下面是一个filter()函数的例子,它利用指定的函数确定是否存在返回的数组中包含某一项。例如,要返回一个所有数值都大于2的数组,可以使用下面的代码:

var nums = [1,2,3,4,5,4,3,2,1];
var result = nums.filter(function(item, index, array){
 return (item > 2);
})
console.info(result);  // [3,4,5,4,3]

上面的代码通过调用filter()方法返回包含3,4,5,4,3的数组。这个方法对于查询符合某些条件的所有数组非常有用。

map()方法也返回一个数组,而这个数组的每一项都是在原始数组中的对应项上运行传入函数的结果。例如,可以给数组中的每一项都乘以2,然后返回这些乘积组成的数组:

var nums = [1,2,3,4,5,4,3,2,1];
var result = nums.map(function(item, index, array){
 return item * 2;
})
console.info(result);  // [2,4,6,8,10,8,6,4,2]

map()方法适合用于创建包含的项于另一个数组一一对应的数组。

最后一个是forEach()方法,它只是对数组中的每一项运行传入的函数。这个方法没有返回值,本质上于使用for循环迭代数组是一样的。看下面的例子:

var nums = [1,2,3,4,5,4,3,2,1];
nums.forEach(function(item, index, array){
 //执行需要的操作
})

js中的这些数组方法通过执行不同的操作,可以大大的方便处理数组的任务。

支持这些迭代方法的浏览器有:IE9+,Firefox2+,Safari3+,Opera9.5+和Chrome。

var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
    //every()和some()最相似
    //every() item:当前遍历项,index:当前项索引,array:数组对象本身
    var everyResult = numbers.every(function (item, index, array) {
      return item > 2;
    });
    alert(everyResult);//false
    //some()
    var someResult = numbers.some(function (item, index, array) {
      return item > 2;
    });
    alert(someResult);//true
    //filter
    var filterResult = numbers.filter(function (item, index, array) {
      return item > 2;
    });
    alert(filterResult);//[3,4,5,4,3]
    //map()
    var mapResult = numbers.map(function (item, index, array) {
      return (item * 2);
    });
    alert(mapResult);//[2,4,6,8,10,8,6,4,2]
    //forEach 本质上和for循环没有区别
    var forEachResult=numbers.forEach(function(item,index,array){
      alert(item)
    });

以上就是本文的全部内容了,希望能给大家一些提示,能够更好的理解javascript迭代方法。

Javascript 相关文章推荐
javascript add event remove event
Apr 07 Javascript
JavaScript Event学习第十一章 按键的检测
Feb 10 Javascript
JQuery的Validation插件中Remote验证的中文问题
Jul 26 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
Jan 24 Javascript
jquery遍历checkbox介绍
Feb 21 Javascript
jQuery实现HTML表格单元格的合并功能
Apr 06 Javascript
简单学习vue指令directive
Nov 03 Javascript
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 jQuery
对node.js中render和send的用法详解
May 14 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
Sep 25 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
May 27 Javascript
vue实现数字动态翻牌的效果(开箱即用)
Dec 08 Javascript
js实现用户注册协议倒计时的方法
Jan 21 #Javascript
浅谈javascript 归并方法
Jan 21 #Javascript
JS获取时间的方法
Jan 21 #Javascript
javascript中数组的定义及使用实例
Jan 21 #Javascript
html的DOM中document对象anchors集合用法实例
Jan 21 #Javascript
javascript 获取浏览器版本
Jan 21 #Javascript
javascript 实现 原路返回
Jan 21 #Javascript
You might like
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
php文件缓存方法总结
2016/03/16 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
再谈JavaScript线程
2015/07/10 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
Python多线程编程简单介绍
2015/04/13 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
学校司机岗位职责
2013/11/14 职场文书
授权委托书样本
2014/04/03 职场文书
转让协议书范本
2014/04/15 职场文书
高中生班主任评语
2014/04/25 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
复活读书笔记
2015/06/29 职场文书
大学生社会服务心得体会
2016/01/22 职场文书
个人业务学习心得体会
2016/01/25 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
php中pcntl_fork详解
2021/04/01 PHP
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android