不生成新数组的迭代器
第一个是
forEach
();
var arr=[1,12,2,3,4];
function square(num){
console.log(num,num*num)
};
arr.forEach(square);
输出结果为:
1 1
12 144
2 4
3 9
4 16
另一个迭代器是
every
,该方法接受一个返回值为布尔类型的函数,对数组中的而每个元素使用该函数。如果所有元素返回true,该方法返回true;
var nums=[1,12,2,3,4];
function isEven(num){
return num%2===0
};
var even=nums.every(isEven);
console.log(even?"all nums are even":"not all nums are even");
这里result:
not all nums are even
some
也接受一个返回值为boolean的函数,只要有一个元素返回true,该方法就返回true;
var nums=[1,12,2,3,4];
function isEven(num){
return num%2===0
};
var even=nums.some(isEven);
console.log(even?"even num is included":"no even");
结果是:
even num is included
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);
其中运行流程如下:
((((((((1+2)+3)+4)+5)+6)+7)+8)+9)+10
reduce方法可以用来将数组中的元素链接成一个长的字符串;
function concat(accumulatedString,item){
return accumulatedString+item
}
var words=["my ","name ","is ","liu Gang "];
var sentence=words.reduce(concat);
console.log(sentence);
sentence=words.reduceRight(concat);
console.log(sentence);
结果是:
my name is liu Gang
liu Gang is name my
其中reduceRight()是从右到左执行。