最近在學JavaScript,中間看到map和reduce方法,覺得挺有意思的,邊學邊寫下這篇博客。
這兩個函數都在某種程度上體現了函數式編程的思想,即將函數作爲傳入另一個函數的參數。
map()方法的調用者一般是個數組,參數是一個函數,稱爲callback,返回值是一個由原數組中每個元素執行給定callback函數的返回值組成的新數組。
也就是說,當你用map()方法時,是將組成數組中的每個元素作爲參數,傳進給定的函數,如果這個函數是有返回值的,則將每次執行函數得到的返回值組成一個新的數組返回。
function pow(x) {
return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
上面我們通過map()方法實現了將arr數組中的每個元素作爲pow()方法的參數,得到的返回值是每次執行pow()函數返回值的集合,也就是一個數組。
當然callback函數也是可以沒有返回值的,此時,視callback函數返回undefined。
var arr = [0, 1, 2, 3, 4, 5];
var arr1 = arr.map(function(item){ console.log(item) });
//打印 0 1 2 3 4 5 // arr1爲[undefined, undefined, undefined, undefined, undefined, undefined]
再來看reduce()方法,和map()方法一樣,調用者也是數組,不過這兒的callback函數有些不同,要求必須接收兩個參數。
reduce()方法按照從左到右的順序,先對第一、第二個元素執行callback函數,將得到的結果作爲一個參數繼續和下一個元素執行callback函數,直到數組中最後一個元素,構建一個最終返回值。
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x + y;
}); // 25
這是一個利用reduce()方法進行數組求和的例子。
需要注意的是reduce()方法除了有callback函數作爲參數外,還可以有一個initialValue作爲參數,如果指定了 initialValue ,則使用 initialValue 作爲 callback 的第一個參數,數組中第一個元素作爲第二個參數。