ES5定義了五個(gè)迭代方法,每個(gè)方法都接收兩個(gè)參數(shù):要在每一項(xiàng)上運(yùn)行的函數(shù)和運(yùn)行該函數(shù)的作用域?qū)ο螅蛇x的),作用域?qū)ο髮⒂绊憈his的值。傳入這些方法中的函數(shù)會(huì)接收三個(gè)參數(shù):數(shù)組的項(xiàng)的值、該項(xiàng)在數(shù)組中的位置和數(shù)組對(duì)象本身。
數(shù)組迭代方法有五種。分別是every,some,filter,map,forEach。
1.every() 和 some()
every()是對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回 true,則返回true。
some()是對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回 true,則返回true。
every()和some()很相似,他們都用于查詢數(shù)組中的項(xiàng)是否滿足某個(gè)條件,對(duì)every()來說,傳入的函數(shù)必須對(duì)每一項(xiàng)都返回true,這個(gè)方法才返回true;否則,則返回false。例如:
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
而some()方法則只要傳入的函數(shù)對(duì)數(shù)組中的某一項(xiàng)返回true,就會(huì)返回true。例如:
var someResult=numbers.some(function(item,index,array){
return (item>2);
});
alert(someResult);//true
以上代碼調(diào)用了every()和some(),傳入的函數(shù)只要給定項(xiàng)大于2就會(huì)返回true。對(duì)于every(),它返回的是false,因?yàn)橹挥胁糠謹(jǐn)?shù)組符合條件 ; 而對(duì)于some(),結(jié)果就是true,因?yàn)橹辽儆幸豁?xiàng)是大于2的。
2.filter()
filter()是對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)所組成的數(shù)組。它利用指定的函數(shù)確定是否在返回的數(shù)組中包含某一項(xiàng)。例如:
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];
3.map()
map()是對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。這個(gè)數(shù)組的每一項(xiàng)都是在原始數(shù)據(jù)中的對(duì)應(yīng)項(xiàng)上運(yùn)行傳入函數(shù)的結(jié)果,例如:
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]
4.forEach()
forEach() 是多數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),這個(gè)方法沒有返回值。它只是對(duì)數(shù)組中的每一項(xiàng)運(yùn)行傳入的函數(shù),沒有返回值。本質(zhì)上與使用for循環(huán)迭代數(shù)組一樣。
var numbers=[1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item,index,array){
//執(zhí)行某些操作
});