ECMAScript 5中的数组方法:forEach(),map(),filter(),every()和some(),reduce()和reduceRight(),indexOf()和。。。

本文深入解析了JavaScript中数组的多种方法,包括遍历、映射、过滤、逻辑判断及化简操作等,如forEach(), map(), filter(), every(), some(), reduce()等,通过实例展示了这些方法的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

1、forEach()方法从头到尾遍历数组,为每个元素调用指定的函数。

2、map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。

3、filter()方法返回的数组元素是调用的数组的一个子集。传递的函数用来逻辑判定:该函数返回true(或能转化为true的值)或false(同理)。

4、every()和some()方法是数组的逻辑判定:它们对数组应用指定的函数进行判定,返回true或false。

5、reduce()和reduceRight()方法使用指定的函数将数组元素进行组合,生成单个值。在函数式编程中称为“注入”和“折叠”。

6、indexOf()和lastIndexOf()搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引,如果未找到就返回-1。



本博文内容摘抄自《JavaScript权威指南(第6版)》

1、forEach()方法从头到尾遍历数组,为每个元素调用指定的函数。

传递(或者叫做调用)的函数作为forEach()的第一个参数,然后forEach()使用三个参数调用该函数:数组元素、元素的索引和数组本身。如果只关心数组元素的值,可以只传递第一个参数(即数组元素)。

var data = [1,2,3,4,5];    //要求和的数组
//计算数组元素的和
var sum = 0;
data.forEach(function(value) { sum += value; });
sum                        //输出:15

//为每个数组元素自加1
data.forEach(function(value, i, list) {list[i] = value + 1; });
data                       //输出:[2,3,4,5,6]

注意:forEach()无法在所有元素都传递给调用函数之前终止遍历,也就是说:遍历不能中途打断。若要提前终止,必须把forEach()方法放在一个try块中,并能抛出一个异常(foreach.break异常)才可以。 

function foreach(a, f, t) {
try { a.forEach(f, t);} 
catch(e) {
if(e === foreach.break) return; 
else throw e;
}}

foreach.break = new Error("StopIteration");

2、map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。

a = [1,2,3];
b = a.map(function(x) {return x*x; });    //b是[1,4,9]

注意:map()返回的是一个新数组,不修复调用的数组。相当于先复制,再数据处理。

3、filter()方法返回的数组元素是调用的数组的一个子集。传递的函数用来逻辑判定:该函数返回true(或能转化为true的值)或false(同理)。

a = [5,4,3,2,1]
small = a.filter(function(x) { return x < 3 });    //[2,1]
other = a.filter(function(x) { return i%2==0 });    //[5,3,1]

//压缩稀疏数组的空缺,返回的数组始终都是稠密的:
var dense = sparse.filter(function() { return true; });
//甚至,压缩空缺并删除undefined和null元素:
a = a.filter(function(x) { return x !== undefined && x !== null; });

4、every()和some()方法是数组的逻辑判定:它们对数组应用指定的函数进行判定,返回true或false。

//every()方法意味“针对所有”:当且仅当针对数组中的所有元素调用判定函数都返回true,它才返回true
a = [1,2,3,4,5];
a.every(function(x) { return x < 10; });    //true:所有的值<10
a.every(function(x) { return x%2 === 0; });    //false:不是所有的值都是偶数

/*some()方法意味“存在”:当数组中至少有一个元素调用判定函数返回true,它就返回true;当且仅当所有元素调用判定函数都返回false,它才返回false */
a = [1,2,3,4,5];
a.some(function(x) { return x%2 === 0; });    //true:a含有偶数值
a.some(isNaN);        //false:a不包含非数值元素

5、reduce()和reduceRight()方法使用指定的函数将数组元素进行组合,生成单个值。在函数式编程中称为“注入”和“折叠”。

var a = [1,2,3,4,5];
/*
reduce()需要两个参数。第一个是执行化简操作的函数(用某种方法把两个值组合或化简为一个值,并返回该值)。第二个(可选)参数是一个传递给函数的初始值。
*/
var sum = a.reduce(function(x,y) { return x+y; }, 0);    //数组求和
var product= a.reduce(function(x,y) { return x*y; }, 1);    //数组求积
var max= a.reduce(function(x,y) { return (x > y) ? x : y; });    //求最大值

/*
reduceRight()的工作原理和reduce()一样,不同的是它按照数组索引从高到低(从右到左)处理数组,而不是从低到高。是否使用reduceRight()取决于化简操作的优先索引顺序。
*/

6、indexOf()和lastIndexOf()搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引,如果未找到就返回-1。

indexOf()从头至尾搜索,而astIndexOf()则反向搜索。

a = [0,1,2,1,0];
a.indexOf(1);        //输出1:a[1]是1
a.lastIndexOf(1);    //输出3:a[3]是1
a.indexOf(3);        //输出-1:没有值为3的元素

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值