reduce()的使用
reduce()方法為歸並類方法,最常見的應用場景就是,計算數組中每一項的總和。
reduce()方法會遍歷數組的每一項,它接收兩個參數:
第一個參數是:每次遍歷都會調用的函數,而這個函數又接收四個參數,分別為:前一個值、當前項、項目的索引和數組對象,
而這個函數的返回值,會傳給下一次遍歷時,執行的這個方法的第一個參數。
第二個參數是:歸並基礎的初始值。
上面哪些參數具體怎么用呢?我們繼續往下看:
let arr = [1,2,3,4,5] arr.reduce((prev,cur)=>{ return prev+cur })
上面這段代碼,是用來計算數組總和的,reduce方法中,只傳了第一個參數,也就是只傳了一個函數,但第二個參數、初始值並沒有傳,當第二個值沒有傳的時候,第一次循環,prev的值,默認為數組的第一項,而cur的值為數組的第二項,也就是第一次循環,會return 1+2 ,這個時候,第一次循環返回的結果會傳給下一次循環中方法的第一個參數,也就是說、第二次循環方法中prev的值,是第一次循環方法返回的結果。
let arr = [1,2,3,4,5] arr.reduce((prev,cur)=>{ return prev+cur },10)
我們傳入一下第二個參數,第一次循環,prev的值為reduce的第二個參數,也就是“歸並基礎的初始值”,而cur的值為數組的第一項,第一次循環會返回10+1 。
總結:
1.當reduce()方法的第二個值為空時,第一次循環方法中的第一個參數(prev)為數組的第一項值,第二個參數(cur)為數組的第二項值,反之,第一次循環方法中的第一個參數(prev)為reduce的第二個參數值,第二個參數(cur)為數組的第一項值。
2.reduce方法的第一個參數,就是每次遍歷都會執行的匿名函數,當前函數的返回值會傳給下一次執行函數的第一個值。也就是prev
reduce()方法的應用場景
1.計算總和
let arr = [1,2,3,4,5] let result = arr.reduce((prev,cur)=>{ return prev+cur }) console.log(result)
2.簡單數組去重
let arr = [1,2,3,4,5,2,3] let result = arr.reduce((prev,cur)=>{ if (!prev.includes(cur)){ prev.push(cur) } return prev },[]) console.log(result)
上面這個例子噢,第一次循環時,prev的值為[] ,cur的值為數組的第一項,也就是 1 ,然后判斷 “1” 是否在[]數組中存在,顯然是不存在的,然后將“1”push到prev中,
並return prev ,當第二次循環時,prev接收到了第一次循環函數返回的值,所以prev就等於[1]了,以此類推。。
3.統計每個值,在數組中出現的次數
let arr = [1,2,3,4,5,2,3] let result = arr.reduce((prev,cur)=>{ if (prev[cur] != undefined) { prev[cur]++ } else { prev[cur] = 1 } return prev },{}) console.log(result)