
数组迭代是一项很重要的操作,在ECMAscript5之前主要使用for语句实现,后来ECMAscript5新增了五个实现迭代的方法:
1.forEach
为数组中的每个元素调用回调函数,数组对象可由回调函数修改。具体用法如下:
array.forEach(callbackfn[, thisArg])
回调函数语法如下:
function callbackfn(value, index, array)
例1 下面的例子使用forEach迭代数组numbers,然后计算数组元素的和并输出。
var numbers = [10, 11, 12];
var sum = 0;
numbers.forEach(
function addNumber(value) {sum += value;}
);
ducument.write(sum); //33
2.every
确定数组所有的成员是否满足指定的测试。具体用法如下:
array.every(callbackfn[, thisArg])
例2 本例检测数组numbers中元素是否都为偶数,并进行提示。
function Checkifeven(value, index, ar) {
document.write(value + "");
if (value % 2 === 0)
return true;
else
return false;
}
var numbers = [2, 4, 5, 6, 8];
if (numbers.every(Checkifeven))
document.write("都是偶数");
else
document.write("不全为偶数"); //2 4 5不全为偶数
除了数组对象以外,every方法可由具有length属性且具有已按数字编制索引的属性名的任何对象使用,如关联数组对象、Arguments等。
3.some
some的作用和every相似,回调函数的用法也与every的相同。确定指定的回调函数是否为数组中的任何元素均返回true。
4.map
对数组的每个元素调用定义的回调函数并返回包含结果的数组。即map函数将返回一个新数组,其中每个元素均为关联的原始数组元素的回调函数返回值。除了数组对象以外,map方法也可由具有length属性,且具有已按数字编制索引的属性名的任何对象使用,如关联数组对象、Arguments等。具体用法如下:
array.map(callbackfn[, thisArg])
例3 该例使用map方法映射数组numbers,把数组中每个元素的值除以divisor的值,然后返回新数组。其中回调函数和divisor都作为对象obj的属性存在,通过这种方法演示如何在map中使用thisArg参数。
var obj = {
divisor: 10,
remainder: function (value) {
return value % divisor;
}
}
var numbers = [6, 12, 25, 30];
var result = numbers.map(obj.remainder, obj);
document.write(result); //6,2,5,0
5.filter
返回数组中的满足回调函数中指定条件的元素。返回值是一个包含回调函数为其返回true的所有值得新数组。如果回调函数为array的所有元素返回false,则新数组的长度为0。
例5 使用filter方法筛选出数组中的素数。
function Checkifprime(value, index, ar) {
high = Math.floor(Math.sqrt(value)) + 1;
for(var div = 2; div <= high; div ++) {
if(value % div == 0) {
return false;
}
}
return true;
}
var numbers = [31, 33, 35, 37, 43];
var primes = numbers.filter(Checkifprime);
document.write(primes); //31,37,43
例6 使用filter方法过滤数组numbers中值在minimum以及maximum范围内的元素。
var Checknumberrange = function(value) {
if(typeof value !== 'number')
return false;
else
return value >= this.minimum && value <= this.maximum;
}
var numbers = [6, 12, "15", 16, "the", -12];
var obj = {minimum: 10, maximum: 20}
var result = numbers.filter(Checknumberrange, obj)
document.write(result); //12, 16
