ES5定義了五個迭代方法,每一個方法都接收兩個參數:要在每一項上運行的函數和運行該函數的做用域對象(可選的),做用域對象將影響this的值。傳入這些方法中的函數會接收三個參數:數組的項的值、該項在數組中的位置和數組對象自己。數組
1.every() 和 some()瀏覽器
every()是對數組中的每一項運行給定函數,若是該函數對每一項都返回true,則返回true。函數
some()是對數組中的每一項運行給定函數,若是該函數對任一項返回true,則返回true。this
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){it
return (item>2);io
});for循環
alert(everyResult);//falsefunction
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.五、Chrome。