点一点阅读更舒适~

javascript 数组迭代

《javascript 数组迭代》

数组迭代是一项很重要的操作,在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

 

 

  点赞
本篇文章采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可
转载请务必注明来源: https://oldpan.me/archives/javascript-array-iterate

   欢迎关注Oldpan博客微信公众号,同步更新博客深度学习文章。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论审核已启用。您的评论可能需要一段时间后才能被显示。