迭代器方法

不生成新数组的迭代器方法

这些方法不产生任何新数组,相反,他们要么对于数组中的每个元素执行某种操作,要么返回一个值。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值