ES5為數組對象定義了5個迭代方法(即遞歸,簡單的說就是自己可以調用自己)。
每個方法接收兩個參數:要在每一項上運行的函數(接收3個參數:數組項的值,該項在數組中的位置,數組對象本身)和(可選的)運行該函數的作用域對象——影響this的值。
以下是這5個迭代方法的作用:
every()對數組中的每一項運行給定函數,如果該函數對每一項都返回true,則返回true ;
filter()對數組中的每一項運行給定函數,返回該函數會返回true的項組成的數組 ;
forEach()對數組中的每一項運行給定函數,這個方法沒有返回值 ;
map()對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組 ;
some()對數組中的每一項運行給定函數,如果該函數對任一項返回true,則返回true;
ps:以上方法不會修改數組中包含的值。
以上方法中,最相似的是every()和some()方法,他們都用於查詢數組中的項是否滿足某個條件。
對於every()來說,傳入的函數必須每一項都返回true,這個方法才返回true;反之,返回false;
而some(),只要傳入的函數對數組中的項有一項返回true,則返回true;也就是說some()方法返回false()的可能就是傳入的和數組中完全對不上號的時候。------其實我看到這里,有沒有覺得它和‘與或非’邏輯門很像?理解性的說,every()就是‘與’,some()就是‘或’,這樣就好理解多了。
for example:
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的。
filter()函數:它利用指定的函數確定是否在返回的數組中包含某一項。------跟jquery中filter()選擇器類似,起一個過濾的作用,返回傳入項與數組中相匹配的項。
for example:
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item, index, array){ return (item > 2); });
alert(filterResult); //[3,4,5,4,3]
這里,通過調用 filter()方法創建並返回了包含 3、4、5、4、3的數組,因為傳入的函數對它們 每一項都返回 true。這個方法對查詢符合某些條件的所有數組項非常有用
map()也返回一個數組,而這個數組的每一項都是在原始數組中的對應項上運行傳入函數的結果。------可以當作是遍歷數組並對數組中的每一項執行所要執行的函數。
例如,可以給數組中的每一項乘以 2,然后返回這些乘積組成的數組,如下所示。
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之后的結果。這個方法適合創建包含的項與另一個數組 一一對應的數組。
最后一個方法是 forEach(),它只是對數組中的每一項運行傳入的函數。這個方法沒有返回值, 本質上與使用 for 循環迭代數組一樣。來看一個例子。
var numbers = [1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item, index, array){ //執行某些操作 });
ps:這些數組方法通過執行不同的操作,可以大大方便處理數組的任務。支持這些迭代方法的瀏覽器有 IE9+、Firefox 2+、Safari 3+、Opera 9.5+和 Chrome。
pps:本人js小白一枚,以上僅是本人看書過程中看到的一些東西,也加一些自己理解的方法,若有不對,歡迎指正,謝謝。