ES5定義了五個迭代方法,每個方法都接收兩個參數:要在每一項上運行的函數和運行該函數的作用域對象(可選的),作用域對象將影響this的值。傳入這些方法中的函數會接收三個參數:數組的項的值、該項在數組中的位置和數組對象本身。
1.every() 和 some()
every()是對數組中的每一項運行給定函數,如果該函數對每一項都返回true,則返回true。
some()是對數組中的每一項運行給定函數,如果該函數對任一項返回true,則返回true。
every()和some()很相似,他們都用於查詢數組中的項是否滿足某個條件,對every()來說,傳入的函數必須對每一項都返回true,這個方法才返回true;否則,則返回false。而some()方法則只要傳入的函數對數組中的某一項返回true,就會返回true。例如:
var numbers=[1,2,3,4,5,4,3,2,1];
var everyResult=numbers.every(function(item,index,array){
return (item>2);
});
alert(everyResult);//false
var someResult=numbers.some(function(item,index,array){
return (item>2);
});
alert(someResult);//true
以上代碼調用了every()和some(),傳入的函數只要給定項大於2就會返回true。對於every(),它返回的是false,因為只有部分數組符合條件 ; 而對於some(),結果就是true,因為至少有一項是大於2的。
2.filter()
filter()是對數組中的每一項運行給定函數,返回該函數會返回true的項所組成的數組。它利用指定的函數確定是否在返回的數組中包含某一項。例如:
var numbers=[1,2,3,4,5,4,3,2,1];
var filterResult=numbers.filter(function(item,index,array){
return (item>2);
});
alter(filterResult); //[3,4,5,4,3];
此例子中,傳入的函數要返回一個所有數值都大於2的數組,通過調用filter()方法創建並返回了包含3/4/5/4/3的數組,因為傳入的函數對它們的每一項都返回true。這個方法對查詢符合某些條件的所有數組項非常有用。
3.map()
map()是對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。這個數組的每一項都是在原始數據中的對應項上運行傳入函數的結果,例如:
var numbers=[1,2,3,4,5,4,3,2,1];
var mapResult=numbers.map(function(item,index,array){
return item*2;
});
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
以上代碼返回的數組中包含每個數乘以2之后的結果,這個方法適合創建包含的項與另一個數組一一對應的數組。
4.forEach()
forEach() 是多數組中的每一項運行給定函數,這個方法沒有返回值。它只是對數組中的每一項運行傳入的函數,沒有返回值。本質上與使用for循環迭代數組一樣。
var numbers=[1,2,3,4,5,4,3,2,1];
numbers.forEach(function(iterm,index,array){
//執行某些操作
});
總結:這些數組方法通過執行不同的操作可以大大方便處理數組的任務,支持這些迭代方法的瀏覽器有IE9+、Firfox2+、Safari3+、Opera9.5、Chrome。
