在es5中,新增了9個數(shù)組方法,大多數(shù)方法都有一個大致的特征,他們的第一參數(shù)是一個函數(shù),并且對數(shù)組中的每個元素都執(zhí)行該函數(shù)<em>(但不包括未初始化或者被刪除的元素?。?</em> 。第二個參數(shù)是用來指定執(zhí)行調(diào)用函數(shù)的this。
下面將介紹幾個常用的方法:
forEach()
最簡單的方法。遍歷整個數(shù)組,對每個元素調(diào)用指定的函數(shù)。
函數(shù)形式:
function (value,index,array) //value 當前元素;index 當前索引;array 該數(shù)組
相比較于傳統(tǒng)的for循環(huán),forEach 方法不可以使用break終止遍歷。如果要提前終止,需要在forEach 函數(shù)中拋出一個異常。map()
遍歷整個數(shù)組,對每個元素調(diào)用指定的函數(shù),將返回值組成一個數(shù)組作為map的返回結(jié)果。
函數(shù)形式:
function (value,index,array) //value 當前元素;index 當前索引;array 該數(shù)組
回到之前提到的一個問題
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 并不會遍歷被刪除或者沒有被初始化的元素,但他會返回和調(diào)用數(shù)組相同長度的數(shù)組,并具有相同的缺失元素。
map 方法并不會改變調(diào)用的數(shù)組
filter()
過濾方法。遍歷整個數(shù)組,對每個元素調(diào)用指定的函數(shù)進行判斷。如果函數(shù)返回值為true,該元素將被添加到返回的數(shù)組中。
函數(shù)形式:
function (value,index,array) //value 當前元素;index 當前索引;array 該數(shù)組
可以使用filter 過濾掉數(shù)組中為undefined 或者null的元素:
a=a.filter(function(d){return d!==undefined && d!=null;})