之前看到reduce方法,老是看得我頭皮發麻,今天無心間又遇到他了,因而學習了下,接觸以後,以爲這個方法還挺好用的,在不少地方均可以派上用場,好比,數組中元素求和、數組去重、求數組中的最大值或最小值等等均可以用到它。javascript
reduce() 方法接收一個函數做爲累加器,數組中的每一個值(從左到右)開始縮減,最終計算爲一個值。java
語法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)數組
能夠看出它接收一個回調函數和一個初始值。函數
其中total爲初始值或者計算後的返回值(必須)、currentValue爲當前元素(必須)、currentIndex爲當前元素索引(可選)、arr爲當前元素所屬的對象(可選)、initialValue爲傳遞給函數的初始值學習
案例1:數組去重spa
// 數組去重 var arr = [12, 34, 34, 342, 345, 34, 123, 345, 45, 12] var newArr = arr.reduce(function (prev, next) { prev.indexOf(next) == -1 && prev.push(next) return prev }, []) console.log(arr) // [12, 34, 34, 342, 345, 34, 123, 345, 45, 12] console.log(newArr) // [12, 34, 342, 345, 123, 45]
初始化一個空數組,判斷下一個元素是否在當前數組中,不存在則添加到當前數組中。對象
案例2:數組中元素求和blog
// 數組求和 var arr = [1, 2, 3, 4, 5] var total = arr.reduce(function (prev, next) { return prev + next }, 0) console.log(total)
將0當作reduce回調函數中的初始值,而後依次累加索引
案例3:求數組中最大值或最小值:ip
// 獲取數組中最大值 var arr = [134798, 3478973, 12, 345, 355, 425, 1342356, 3425566, 7908798] var max = arr.reduce(function (prev, next) { return Math.max(prev, next) // Math.min(prev, next) }, 0) console.log(max)
tips:initialValue爲傳遞給函數的初始值,假如該值不存在時,則回調函數的初始值爲數組中的第一項,即回調函數中的prev值