不生成新数组的迭代器方法
这些方法不产生任何新数组,相反,他们要么对于数组中的每个元素执行某种操作,要么返回一个值。
forEach()方法
该方法接受一个函数作为参数,对数组中的每个元素使用该函数。
function square(num) {
console.log(num, num*num);
}
var nums = [1,2,3,4,5,6,7];
nums.forEach(square);
该程序的输出为:
1 1
2 4
3 9
4 16
5 25
6 36
7 49
every()方法
该方法接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。如果对于所有的元素,该函数均返回true,则该方法返回true。
function isEven(num) {
return num % 2 == 0;
}
var nums = [2,4,6,8,10];
var even = nums.every(isEven);
if (even){
console.log("all numbers are even");
}else{
console.log("not all numbers are even");
}
输出为:
all numbers are even
将数组改为[2,4,6,7,8,10]
输出为:
not all numbers are even
some()方法
该方法也接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回true,该方法就返回true。
function isEven(num) {
return num%2 == 0;
}
var nums = [1,2,3,4,5,6,7,8,9,10];
var someEven = nums.some(isEven);
if (someEven){
console.log("some numbers are even");
}else{
console.log("no numbers are even");
}
nums = [1,3,5,7,9];
someEven = nums.some(isEven);
if (someEven){
console.log("some numbers are even");
}else{
console.log("no numbers are even");
}
输出结果为:
some numbers are even
no numbers are even
reduce()方法
reduce()方法接受一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值和数组中的后续元素调用该函数,直到数组中的最后一个元素,最后返回得到的累加值。
function add(runningTotal, currentValue) {
return runningTotal + currentValue;
}
var nums = [1,2,3,4,5,6,7,8,9,10];
var sum = nums.reduce(add);
console.log(sum);//55
执行过程如下:
add(1,2) -> 3
add(3,3) -> 6
add(6,4) -> 10
add(10,5) -> 15
add(15,6) -> 21
add(21,7) -> 28
add(28,8) -> 36
add(36,9) -> 45
add(45,10) -> 55
输出结果为:
55
生成新数组的迭代器方法
map()方法
map()和forEach()有点像,对数组中的每个元素使用某个函数。两者的区别是map()返回一个新的数组,该数组的元素是对原有元素应用某个函数得到的结果。
function curve(grade) {
return grade += 5;
}
var grades = [45, 55, 65, 75, 85];
var newgrades = grades.map(curve);
console.log(newgrades);//50, 60, 70, 80, 90
输出结果为:
50, 60, 70, 80, 90
//取出每个字符串的第一个字母
function first(word) {
return word[0];
}
var words = ["for", "your", "information"];
var acronym = words.map(first);
console.log(acronym.join(""));//fyi
输出结果为:
fyi
filter()方法
filter()和every()类似,传入一个返回值为布尔类型的函数。和every()方法不同的是,当对数组中的所有元素应用该函数,结果均为true时,该方法并不返回true,而是返回一个新数组,该数组包含应用该函数后结果均为true的元素。
function isEven(num) {
return num % 2 == 0;
}
function idOdd(num) {
return num % 2 != 0;
}
var nums = [];
for (var i = 0; i < 20; i++) {
nums[i] = i + 1;
}
var evens = nums.filter(isEven);
console.log(evens);//2, 4, 6, 8, 10, 12, 14, 16, 18, 20
var odds = nums.filter(idOdd);
console.log(odds);//1, 3, 5, 7, 9, 11, 13, 15, 17, 19
输出结果为:
2, 4, 6, 8, 10, 12, 14, 16, 18, 20
1, 3, 5, 7, 9, 11, 13, 15, 17, 19