javascript 数组迭代方法
2015-06-26 12:03
639 查看
ECMAScript 5 为数组定义了5个迭代方法,分别是every(), some(), filter(), map() 和 forEach()
这五个方法都接收两个参数,第一个是将在数组中每一项上运行的函数,该函数接收三个参数,分别是该项的值,该项在数组中个索引,数组对象本身。第二个是可选参数,为运行该函数的作用域对象。
一、every() 和 some() 比较相似,用于查询数组中的项是否满足某个条件,every() 表示是否数组内的所有项都满足这个条件, some()表示是否至少有一项满足这个条件。比如判断数组内元素是否都大于0:
即对于every()来说,当传入的函数对每一项都返回true时,every()返回true; 对于some()来讲,当传入的函数对任一项返回true时,some()返回true。
二、filter() 顾名思义为用于过滤的方法,该方法返回符合筛选条件的数组项。
比如查询所有大于3的项:
三、map()也返回一个数组,这个数组的每一项都是传入函数在原始数组中的对应项运行后的结果。
比如返回原始数组每一项乘2的数组:
三、forEach() 方法没有返回值,只是对数组中每一项运行传入函数,本质上和使用for循环是一样的。
最后,之所以总结迭代方法,因为看到了一个这样的题目:
1,以下表达式的运行结果是:
["1","2","3"].map(parseInt)
A.["1","2","3"]
B.[1,2,3]
C.[0,1,2]
D.其他
这个题目选D。
需要注意的是map()接收的参数有三个, parseInt接收的参数有两个分别是需要转换的值、转换数的进制。
所以题目相当于:
所以parseInt 分别执行了parseInt("1", 0) 输出 1, parseInt("2", 1) 输出 NaN, parseInt("3", 2) 输出 NaN
其实关键还在于parseInt 接收两个参数,如果是parseFloat 就输出1,2,3而选B了。
这五个方法都接收两个参数,第一个是将在数组中每一项上运行的函数,该函数接收三个参数,分别是该项的值,该项在数组中个索引,数组对象本身。第二个是可选参数,为运行该函数的作用域对象。
一、every() 和 some() 比较相似,用于查询数组中的项是否满足某个条件,every() 表示是否数组内的所有项都满足这个条件, some()表示是否至少有一项满足这个条件。比如判断数组内元素是否都大于0:
var nums = [-5, -4, 1, 2, 3, 4 ,5]; var everyResult = nums.every(function(item, index, array){ return item > 0; }); console.log(everyResult); // false, 不是所有项都大于0 var someResult = nums.some(function(item, index, array){ return item > 0; }); console.log(someResult); // true, 有项大于0
即对于every()来说,当传入的函数对每一项都返回true时,every()返回true; 对于some()来讲,当传入的函数对任一项返回true时,some()返回true。
二、filter() 顾名思义为用于过滤的方法,该方法返回符合筛选条件的数组项。
比如查询所有大于3的项:
var nums = [-5, -4, 1, 2, 3, 4 ,5]; var filterResult = nums.filter(function(item, index, array){ return item > 3; }); console.log(filterResult);<span style="white-space:pre"> </span>// 输出[4, 5]
三、map()也返回一个数组,这个数组的每一项都是传入函数在原始数组中的对应项运行后的结果。
比如返回原始数组每一项乘2的数组:
var nums = [-5, -4, 1, 2, 3, 4 ,5]; var mapResult = nums.map(function(item, index, array){ item *= 2; return item; }); console.log(mapResult); // 输出 [-10, -8, 2, 4, 6, 8, 10]需要注意的是改变item的值并不会影响原数组的值,只有通过index访问数组项才能修改原始数组的值。
var nums = [-5, -4, 1, 2, 3, 4 ,5]; var mapResult = nums.map(function(item, index, array){ item *= 2; return item; }); console.log(mapResult); // 输出 [-10, -8, 2, 4, 6, 8, 10]
console.log(nums); // 输出 [-5, -4, 1, 2, 3, 4, 5]
mapResult = nums.map(function(item, index, array){
array[index] *= 2;
return array[index];
});
console.log(mapResult); // 输出 [-10, -8, 2, 4, 6, 8, 10]
console.log(nums); // 输出 [-10, -8, 2, 4, 6, 8, 10]
三、forEach() 方法没有返回值,只是对数组中每一项运行传入函数,本质上和使用for循环是一样的。
var nums = [-5, -4, 1, 2, 3, 4 ,5]; nums.forEach(function(item, index, array){ //处理代码 });
最后,之所以总结迭代方法,因为看到了一个这样的题目:
1,以下表达式的运行结果是:
["1","2","3"].map(parseInt)
A.["1","2","3"]
B.[1,2,3]
C.[0,1,2]
D.其他
这个题目选D。
需要注意的是map()接收的参数有三个, parseInt接收的参数有两个分别是需要转换的值、转换数的进制。
所以题目相当于:
var result = ["1", "2", "3"].map(function(item, index, array){ return parseInt(item, index); }); console.log(result); // [1, NaN, NaN]parseInt 第二个参数如果省略或填0则按十进制转换,如果小于2或大于36则返回NaN。
所以parseInt 分别执行了parseInt("1", 0) 输出 1, parseInt("2", 1) 输出 NaN, parseInt("3", 2) 输出 NaN
其实关键还在于parseInt 接收两个参数,如果是parseFloat 就输出1,2,3而选B了。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 异步流程控制:7 行代码学会 co 模块
- JavaScript拆分字符串时产生空字符的原因
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式
- Flex结合JavaScript读取本地路径的方法
- PowerShell中执行Javascript的方法示例
- javascript asp教程第六课-- response方法
- javascript asp教程More About Recordsets
- javascript asp教程第十二课---session对象
- javascript asp教程创建数据库连接
- javascript asp教程错误处理
- javascript asp教程第十课--global asa