数组的迭代方法
ECMAScript 5 为数组定义了 5 个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数(可选的)运行该函数的作用域对象——影响 this 的值。传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置和数组对象本身。根据使用的方法不同,这个函数执行后的返回值可能会也可能不会影响方法的返回值。以下是这 5 个迭代方法的作用。
不生成新数组的迭代器方法:
forEach()
:对数组中的每一项运行给定函数。这个方法没有返回值。
function square(num){
alert(num * num);
}
var nums = [1,2,3,4,5];
console.log(nums.forEach(square)); // Array(5) [1,4,9,16,25]
every()
:对数组中的每一项运行给定函数,如果该函数对每一项都返回 true
,则返回 true
function isEven (num) {
return num % 2==0;
}
var evens=[2,4,6,8,10];
var isAllEven = evens.every(isEven); //当且仅当数组中的所有的元素返回为真,every函数才会返回为真
if(isAllEven){
alert("all is even");
}else{
alert("not all is even");
}
some()
:对数组中的每一项运行给定函数,只要该函数有一项返回 true
,则返回 true
var nums = [1,2,3,5,7,9];
function isEven (num) {
return num % 2==0;
}
alert(nums.some(isEven)); //true
生成新数组的迭代器方法:
map()
:对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
function firstAlpha (word) {
return word[0].toUpperCase();
}
var words = ["nolan","is","studying","javascript"];
var firstAlphas = words.map(firstAlpha);
//使用join可以去掉连接数组元素的逗号
console.log(firstAlphas.join("")); //NISJ
filter()
:对数组中的每一项运行给定函数,返回该函数会返回 true
的项组成的数组。
function isEven (num) {
return num % 2==0;
}
var nums=[1,3,4,6,7,10];
var evens = nums.filter(isEven);
console.log(evens); //Array(3) [ 4, 6, 10 ]