js數組reduce()方法的使用和一些應用場景


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM