前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js数组的迭代器方法

js数组的迭代器方法

作者头像
山河木马
发布2019-03-05 17:56:33
2K0
发布2019-03-05 17:56:33
举报
文章被收录于专栏:山河木马

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

  • forEach() 该方法接受一个函数作为参数,对数组中的每个元素使用该函数。
代码语言:javascript
复制
function square(num) {
    console.log(num*num);
}
var num = [1,2,3,4,5];
num.forEach(square);//输出1,4,9,16,25
  • every() 该方法接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。如果对于所有的元素,该函数均返回true,则该方法放回true。
代码语言:javascript
复制
function isEven(num) {
    return num % 2 == 0;
}
var num = [2,4,6,8,10];
var even = num.every(isEven);
if (even) {
    console.log("all numbers are even");//输出这条
} else {
    console.log("not all numbers are even");
}
  • some() 该方法也接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回为true,该方法就返回true。
代码语言:javascript
复制
function isEven(num) {
    return num % 2;
}
var num = [1,2,3,4,5,6,7,8,9,10];
var someEven = num.some(isEven);
if (someEven) {
    console.log("some numbers are even");//输出这条
} else {
    console.log("no numbers are even");
}
num = [1,3,5,7,9];
someEven = num.some(isEven);
if (someEven) {
    console.log("some numbers are even");
} else {
    console.log("no numbers are even");//输出这条
}
  • reduce() 该方法接受一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值和数组中的后续元素调用改函数,直到数组中的最后一个元素,最后返回得到的累加值。
代码语言:javascript
复制
function add(runningTotal, currentValue) {
    return runningTotal + currentValue;
}
var num = [1,2,3,4,5,6,7,8,9,10];
var sum = num.reduce(add);
//其执行原理如下图所示
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

reduce 方法也可以用来将数组中的元素连接成一个长的字符串

代码语言:javascript
复制
function concat(accumulatedString, item) {
    return accumulatedString + item;
}
var words = ["the ", "quick ", "brown ", "fox"];
var sentence = words.reduce(concat);
console.log(sentence);//the quick brown fox;

JavaScript还提供了reduceRight() 方法,和reduce()方法不同,它是从右到左执行。

代码语言:javascript
复制
function concat(accumulatedString, item) {
    return accumulatedString + item;
}
var word = ["the ", "quick ", "brown ", "fox"];
var sentence = word.reduceRight(concat);
console.log(sentence);//" fox brown quick the";

2.生成新数组的迭代器方法

  • map() 该方法对数组中的每个元素使用某个函数,返回一个新的数组,该数组的元素是对原有元素应用某个函数得到的结果。
代码语言:javascript
复制
function curve(grade) {
    return grade += 5;
}
var grades = [1,2,3,4,5];
var newGrades = grades.map(curve);
console.log(newGrades);//6,7,8,9,10
  • filter() 该方法传入一个返回值为布尔类型的函数,当对数组中的所有元素应用改函数,结果均为true时,该方法并不返回true,而是返回一个新的数组。改数组包含应用该函数后结果为true的元素。
代码语言:javascript
复制
function isEven(num) {
    return num % 2 == 0;
}
function isOdd(num) {
    return num % 2 != 0;
}
var num = [];
for (var i = 0; i < 20; ++i) {
    num[i] = i + 1;
}
var evens = num.filter(isEven);
console.log(evens);//2,4,6,8,10,12,14,16,18,20
var odds = num.filter(isOdd);
console.log(odds);//1,3,5,7,9,11,13,15,17,19

下面是另一个使用filter()方法的有趣案例(筛选出随机数中大于60的数)

代码语言:javascript
复制
function passing(num) {
    return num >= 60;
}
var grads = [];
for (var i = 0; i < 20; ++i) {
    grads[i] = Math.floor(Math.random() * 101);
}
var passGrads = grads.filter(passing);
console.log(grads);
console.log(passGrads);

还可以使用filter()方法过滤字符串数组(过滤掉那些不包含“cie”的单词)

代码语言:javascript
复制
function afterc(str) {
    if (str.indexOf("cie") > -1) {
        return true;
    }
    return false;
}
var word = ["recieve","deceive","percieve","deceit","concieve"];
var misspelled = word.filter(afterc);
console.log(misspelled);//recieve,percieve,convieve
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/09/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.不生成新数组的迭代器方法
  • 2.生成新数组的迭代器方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档