1. 程式人生 > >Array的 map() 和 reduce()

Array的 map() 和 reduce()

map 參數 最終 arr 整數 也不會 進制 int() fun

map()

map() 方法返回一個新數組,新數組中的元素為原始數組中的元素依次調用參數中的函數處理後的值。

map() 方法不會對空數組進行檢測,也不會修改原數組。

語法:

array.map(function (currentValue, index, arr), thisValue)

參數說明:

技術分享圖片

註意:

在使用它的時候要特別註意參數函數中的參數,如果參數與(currentValue, index, arr)有沖突,可以考慮對參數函數做些修改後再傳入。例如下面這個示例:

// 我們想使用下面的代碼把arr中的字符串全都轉換為整數

var arr = [‘1‘, ‘2‘, ‘3‘, ‘4‘];
console.log(arr.map(parseInt));

// 但輸出結果卻為:[ 1, NaN, NaN, NaN ]

這是因為parseInt()接受兩個參數string,和radix,所以parseInt會把map()傳的index參數當作radix,而redix為將字符串要解析成的進制數,以此就可以分析出為什麽會出現NAN了。

// 我們可以使用裝飾器的思想對parseInt做如下修改
var arr = [‘1‘, ‘2‘, ‘3‘, ‘4‘];
var oldParseInt = parseInt;
parseInt = function(x) {
    return oldParseInt(x, 10);
}
console.log(arr.map(parseInt));    
// 輸出結果為:[ 1, 2, 3, 4 ]

reduce()

reduce() 方法接受一個函數作為累加器,數組中的值從左到右開始計算,最終返回計算出來的一個值。reduce() 對於空數組不會執行回調。當數組中只有一個元素時無論參數函數是什麽,reduce都返回數組中的唯一元素。

可以這樣理解reduce:

[x1, x2, x3, x4].reduce(f) --> f(f(f(x1, x2), x3), x4)

語法:

array.reduce(function(total, currentVal, currentIndex, arr), inintialValue);

參數說明:

技術分享圖片

示例:

var arr = [1];
var f = function(x, y) {
    return x + 10;
}
console.log(arr.reduce(f));    //輸出整數1

var arr = [1, 2, 3, 4];
var f = function(x, y) {
    return x*10 + y;
}
console.log(arr.reduce(f));    //輸出整數1234

Array的 map() 和 reduce()