reduce
reduce ( callback, initiaValue) 会传入两个变量,回调函数 ( callback) 和初始值 ( initiaValue) 。1. 只传回调函数 prev只取数组的第一个元素 next从数组的第二个元素开始一直往下取var arr = [ "a" , "b" , "c" , "d" , "e" , "f" ] ; function noPassValue ( ) { return arr. reduce ( function ( prev, next) { console. log ( "prev:" , prev) ; console. log ( "next:" , next) ; return prev; } ) ; } console. log ( noPassValue ( ) ) ; => a2. 传入回调函数和初始值时 prev只取初始值 next从数组的第一个元素开始一直往下取var arr = [ "a" , "b" , "c" , "d" , "e" , "f" ] ; function passValue ( ) { return arr. reduce ( function ( prev, next) { console. log ( "prev:" , prev) ; console. log ( "next:" , next) ; prev[ next] = 1 ; return prev; } , { } ) ; } console. log ( passValue ( ) ) ; => { a: 1 , b: 1 , c: 1 , d: 1 , e: 1 , f: 1 } reduce的应用1. 数组求和var arr = [ 1 , 2 , 3 , 4 ] ; var sum = arr. reduce ( function ( total, currentValue) { console. log ( total, currentValue) ; return total + currentValue; } ) ; console. log ( sum) ; var eachSum = 0 ; arr. forEach ( function ( currentValue) { eachSum += currentValue; } ) ; console. log ( eachSum) ; 2. 合并二维数组 与 Object. entries ( obj) 互逆var twoArr = [ [ "mu" , "zi" ] , [ "dig" , "big" ] , [ "lucky" , "jiji" ] ] ; var oneArr = twoArr. reduce ( function ( total, currentValue) { console. log ( total) ; return total. concat ( currentValue) ; } ) ; console. log ( oneArr) ; 3. 统计一个数组中有多少个重复的单词不用reduce时:var arr = [ "apple" , "orange" , "apple" , "orange" , "pear" , "orange" ] ; function getWordCnt ( ) { var obj = { } ; for ( var i = 0 , l = arr. length; i < l; i++ ) { var item = arr[ i] ; obj[ item] = obj[ item] + 1 || 1 ; } return obj; } console. log ( getWordCnt ( ) ) ; var arr = [ "apple" , "orange" , "apple" , "orange" , "pear" , "orange" ] ; function getWordCnt ( ) { return arr. reduce ( function ( prev, next) { prev[ next] = prev[ next] + 1 || 1 ; return prev; } , { } ) ; } console. log ( getWordCnt ( ) ) ;