浅谈javascript 迭代方法
作者:hebedich 发布时间:2024-06-07 15:50:55
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)
});


猜你喜欢
- 啥也不说了,直接上代码吧!# encoding:utf-8import requests # 导入requests模块用于访问测试自己的ip
- 在Vista IIS 7 中用 vs2005 调试 Web 项目核心是要解决以下几个问题:1、Vista 自身在安全性方面的User Acc
- 本文实例为大家分享了Python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下玩法:童年经典,普通模式没啥意思,小时候我们都是玩加速
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&q
- 其他方法都不适用,只有这个documentElement才能正确取得当前可见区域的大小var w = parseInt(document.d
- 1. 事务介绍MVCC之前,先介绍下事务:事务是为了保证数据库中数据的完整性和一致性。事务的4个基本要素:原子性(Atomicity):要么
- 本文实例讲述了Python Web框架之Django框架Model基础。分享给大家供大家参考,具体如下:model是关于你的数据的单一的,确
- Pygame是一个多用于游戏开发的模块。本文实例主要是在演示框里实现一个移动的矩形实例代码,完整代码如下:#moving rectangle
- 前言:NoxfileNox 默认在一个名为noxfile.py的文件中查找配置。在运行 nox 时,你可以使用 --noxfile参数指定其
- 1 创建JupyterLab运行脚本首先找到jupyter-lab命令的位置,一般在~/.local/bin/下,可以创建shell脚本au
- 这个问题对于规模稍微大些的项目而言,显得尤其重要了,数据库中如果有几百个存储过程, 难道还一个个找不成,即使自己很了解业务和系统,时间长了,
- 1,七层网络协议应表会传网数物:应用层、表示层、会话层: (这三层又可以合并为应用层,这样就是五层网络协议【osi五层协议】) python
- 本文实例讲述了python使用BeautifulSoup分析网页信息的方法。分享给大家供大家参考。具体如下:这段python代码查找网页上的
- 本文介绍的是关于Python中列表项的推导式与过滤操作的相关内容,分享出来供大家参考学习,下面来一起看看吧:典型代码1:data_list
- 一、表结构TABLE personidname1你2你(一个空格)3你(二个空格)二、查询与结果select * from person w
- 今天来分享一个“高大上”的技术——使用python编写一个可以用微信远程控制电脑的程序!先来分析一下控制的具体流程:我们使用微信给特定的邮箱
- 1.问题现象go编译的时候报错import cycle not allowedcycle意思很简单就是循环的意思。代表的就是一个包被循环的导
- #!/usr/bin/python#coding:utf-8#write:JACK#info:ftp exampleimport ftpli
- 1. 效果展示2. 游戏介绍经典的推箱子是一个非常古老游戏,甚至是80,90年代的回忆,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要
- 写在前面大家好,我是第一次python学了一个学期,期末要完成一个毕业生信息管理系统大作业的小韩了,由于上次没有仔细看开发实现的要求,实现了