ECMAScript 5 中的数组方法

ECMAScript 5定义了9个新的数组方法来遍历、映射、过滤、检测、简化和搜索数组。

大多数方法的第一个参数接受一个函数,并且对数组的每个元素调用传递的函数,大多数情况下,调用提供的函数使用三个参数:

数组元素、元素索引和数组本身。通常只需要第一个参数。通常不会修改它们调用的原始数组。

1.forEach()

遍历数组,为每个元素调用指定的函数。

var data=[1,2,3,4,5,6];
var sum=0;
data.forEach(function(v){//其中的v就是数组的值 123456
sum+=v;})
document.write(sum+"<br>");//打印出来是21
document.write(data);

forEach 无法在所有元素都调用函数之前终止,如要提前终止,必须把forEach 放在try  catch中。

function foreach(a,b,c){
 try{
  a.forEach(b,c);
}catch(e){
  if(e===foreach.break)return;
 else throw e;
}
}
foreach.break=new Error("StopIteration");
 
}

 2. map()

将调用的数组的每个元素传递给指定函数,并返回一个数组。

var data = [1,2,3,4,5]

var data2=data.map((function(i){return i*2}))//[2, 4, 6, 8, 10]  ==  var data3=data.map((i)=>{return i*3});

 如果数组是稀疏数组,返回的也是相同方式的稀疏数组,相同的长度,相同的却是元素。

3.filter()

返回数组元素调用的数组的一个子集,传递的函数是进行逻辑判定,盖饭会返回true或者false。返回一个新数组。

 

var data = [1,2,3,4,5]

var data4= data.filter((i)=>i<=2); //[1, 2]

 filter()会调过稀疏数组缺少的元素,返回数组总是稠密的。

var newdata=data.filter(()=>{return true});

var newdata1= data.filter((i)=> return x!==undefined && i!==null); //去除undefined 和null

 

4.every() 和some()

every()所有元素满足条件才返回true;

var data=[1,2,3,4,5,6];
data.every((i)=>{return i<8})//true
data.every((i)=>{return I<3})//false

some()是否包元素。

var data=[1,2,3,4,5,6];
data.some((i)=>{return i<4})//true
data.some((i)=>{return i>10})//false;

 

注意,一旦every()和some()确认该返回什么值它们就会停止遍历数组元素。some()在判定函数第一次返回true后就返回true,但如果判定函数一直返回false,它将会遍历整个数组。every()恰好相反:它在判定函数第一次返回false后就返回false,但如果判定函数一直返回true,它将会遍历整个数组。注意,根据数学上的惯例,在空数组上调用时,every()返回true,some()返回false。

5. reduce()和reduceRight

reduce()和reduceRight()方法使用指定的函数将数组元素进行组合,生成单个值。这在函数式编程中是常见的操作,也可以称为“注入”和“折叠”。

var a=[1,2,3,4,5]
 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;});//求最大值

 

在空数组上,不带初始值参数调用reduce()将导致类型错误异常。如果调用它的时候只有一个值——数组只有一个元素并且没有指定初始值,或者有一个空数组并且指定一个初始值——reduce()只是简单地返回那个值而不会调用化简函数。 reduceRight()的工作原理和reduce()一样,不同的是它按照数组索引从高到低(从右到左)处理数组,而不是从低到高。

 

6.indexOf() 和lastIndexOf()

indexOf()和lastIndexOf()搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1。indexOf()从头至尾搜索,而lastIndexOf()则反向搜索。

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的元素

 

indexOf()和lastIndexOf()方法不接收一个函数作为其参数。第一个参数是需要搜索的值,第二个参数是可选的:它指定数组中的一个索引,从那里开始搜索。如果省略该参数,indexOf()从头开始搜索,而lastIndexOf()从末尾开始搜索。第二个参数也可以是负数,它代表相对数组末尾的偏移量,对于splice()方法:例如,-1指定数组的最后一个元素。

判断数组类型 Array.isArray();

 

posted @ 2017-09-15 19:29  游侠儿。  阅读(187)  评论(0编辑  收藏  举报