在es5中,新增了9个数组方法,大多数方法都有一个大致的特征,他们的第一参数是一个函数,并且对数组中的每个元素都执行该函数<em>(但不包括未初始化或者被删除的元素!!)</em> 。第二个参数是用来指定执行调用函数的this。
下面将介绍几个常用的方法:
forEach()
最简单的方法。遍历整个数组,对每个元素调用指定的函数。
函数形式:
function (value,index,array) //value 当前元素;index 当前索引;array 该数组
相比较于传统的for循环,forEach 方法不可以使用break终止遍历。如果要提前终止,需要在forEach 函数中抛出一个异常。map()
遍历整个数组,对每个元素调用指定的函数,将返回值组成一个数组作为map的返回结果。
函数形式:
function (value,index,array) //value 当前元素;index 当前索引;array 该数组
回到之前提到的一个问题
var a=new Array(4);
var b=[,,,,]
var c=[undefined ,undefined ,undefined ,undefined ]
console.log(a.map((elem,index)=>index)); // [undefined × 4]
console.log(b.map((elem,index)=>index)); // [undefined × 4]
console.log(c.map((elem,index)=>index)); //[0,1,2,3]
原因就是 map 并不会遍历被删除或者没有被初始化的元素,但他会返回和调用数组相同长度的数组,并具有相同的缺失元素。
map 方法并不会改变调用的数组
filter()
过滤方法。遍历整个数组,对每个元素调用指定的函数进行判断。如果函数返回值为true,该元素将被添加到返回的数组中。
函数形式:
function (value,index,array) //value 当前元素;index 当前索引;array 该数组
可以使用filter 过滤掉数组中为undefined 或者null的元素:
a=a.filter(function(d){return d!==undefined && d!=null;})