ES5為數組定義了5個迭代方法。每個方法都接受兩個參數:要在每項上運行的函數和(可選的)運行該函數的作用域對象----影響this的值。傳入這些方法中的函數會接收三個參數:數組項的值、該項在數組中的位置和數組對象本身。根據使用的方法不同,這個函數執行后的返回值可能會也可能不會影響訪問的返回值。以下是這5個迭代方法的作用。
1、every():對數組中的每一項運行給定函數,如果該函數對每一項都返回true,則返回true。
2、filter():對數組中的每一項運行給定函數,返回該函數會返回true的項組成的數組。
3、forEach():對數組中的每一項運行給定函數。這個方法沒有返回值。
4、map():對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。
5、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的。
下面再看一看filter()函數,它利用指定的函數確定是否在返回的數組中包含的某一項,例如,要返回一個所有數值都大於2的數組,可以使用以下代碼。
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,3]
這里,通過調用filter()方法創建並返回了包含3、4、5、4的數組,因為傳入的函數對它們每一項都返回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){ // 執行某些操作 });
這些數組方法通過執行不同的操作,可以大大方便處理數組的任務。支持這些迭代方法的瀏覽器有IE9+、Firefox 2+ 、Safari 3+、Opera 9.5+和Chrome。
·
·
·
·
·
到此結束。