之前看到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值