天天看點

JavaScript Array數組疊代方法every()、some()、filter()、forEach()、map()

      • every()方法
      • some()方法
      • filter()方法
      • forEach()方法
      • map()方法
      • 歸并方法

ECMAScript 5為數組定義了 5個疊代方法。每個方法都接收兩個參數:要在每一項上運作的函數和 (可選的)運作該函數的作用域對象——影響 this 的值。

傳入這些方法中的函數會接收三個參數:數組項的值item、該項在數組中的位置index和數組對象本身array。

根據使用的方法不同,這個函數執行後的傳回值可能 會也可能不會影響方法的傳回值。以下是這 5個疊代方法的作用。

every()方法

對數組中的每一項運作給定函數,如果該函數對每一項都傳回 true,則傳回 true。

var num = [, , , , , ];
var everyResult = num.every(function(item, index, array) {
                return (item > 2);
});
alert(everyResult); //false
           

some()方法

some():對數組中的每一項運作給定函數,如果該函數對某一項傳回 true,則傳回 true

var num2 = [, , , , , , ];
var someResult = num2.some(function(item, index, array) {
                return (item > 12);
});
alert(someResult); //true
           

filter()方法

filter():對數組中的每一項運作給定函數,傳回該函數會傳回 true 的項組成的數組。

var num3 = [, , , , , , ];
var filterResult = num3.filter(function(item, index, array) {
                return ((item % 3) == 0);
});
document.write(filterResult); //3, 9, 18, 333
           

forEach()方法

forEach():對數組中的每一項運作給定函數。這個方法沒有傳回值。

var num4 =  [, , , , , , ];
var sum = ;
num4.forEach(function(item, index, array){
                sum += item;
});
document.write(sum); //376
           

map()方法

map():對數組中的每一項運作給定函數,傳回每次函數調用的結果組成的數組。

var num5 = [, , , , , ];
var mapResult = num5.map(function(item, index,  array) {
                return item * 2;
});
document.write(mapResult); //2, 4, 6, 8, 10, 12
           

歸并方法

ECMAScript 5 還新增了兩個歸并數組的方法:

reduce()

reduceRight()

這兩個方法都會疊 代數組的所有項,然後建構一個終傳回的值。而 reduceRight()則從數組的後一項開始,向前周遊到第一項。

這兩個方法都接收兩個參數:一個在每一項上調用的函數和(可選的)作為歸并基礎的初始值。傳給 reduce()和 reduceRight()的函數接收 4 個參數:前一個值、目前值、項的索引和數組對象。

這個函數傳回的任何值都會作為第一個參數自動傳給下一項。第一次疊代發生在數組的第二項上,是以第一個參數是數組的第一項,第二個參數就是數組的第二項。 使用 reduce()方法可以執行求數組中所有值之和的操作,比如:

var values = [,,,,]; 
 var sum = values.reduce(function(prev, cur, index, array){   
                 return prev + cur; 
     }); 
 alert(sum); //15
           

第一次執行回調函數,prev 是 1,cur 是 2。第二次,prev 是 3(1加 2的結果),cur 是 3(數組 的第三項)。這個過程會持續到把數組中的每一項都通路一遍,後傳回結果。 reduceRight()的作用類似,隻不過方向相反而已。來看下面這個例子。

var values = [,,,,]; 
var sum = values.reduceRight(function(prev, cur, index, array){    
            return prev + cur; 
 }); 
 alert(sum); //15 
           

在這個例子中,第一次執行回調函數,prev 是 5,cur 是 4。當然,終結果相同,因為執行的都 是簡單相加的操作。 使用 reduce()還是 reduceRight(),主要取決于要從哪頭開始周遊數組。除此之外,它們完全 相同。 支援這兩個歸并函數的浏覽器有 IE9+、Firefox 3+、Safari 4+、Opera 10.5和 Chrome。

繼續閱讀