ES6數組方法 -- reduce()


reduce()的用法

平時很少用得到reduce()方法,事實上,如果你能真正了解它的話,其實在很多地方我們都可以用得上。

arr.reduce(function(sum,num,index,arr){
    ...
},init)

其中,

arr 表示原數組

sum  表示上一次調用時的返回值, 或者初始值init

num  表示當前正在處理的數組元素

index 表示當前正在處理的數組元素的索引,若提供init值,則索引為0,否則索引為1

init  表示初始值

其實常用的參數只有兩個:  sum num

實例

1. 求數組項之和

var arr = [1,2,3,4,5]

var sum = arr.reduce((sum,num)=>{
   return sum + num 
},0)

//由於傳入了初始值0,所以開始時sum的值為0,num的值為數組第一項1,相加之后返回值為1作為下一輪回調的sum值,然后再繼續與下一個數組項相加,以此類推,直至完成所有數組項的和並返回。

console.log(sum) //15

2. 求數組項最大值

var arr = [2,5,6,8,10]

var maxNum = arr.reduce((max,num) => {
    return Math.max(max,num)       
})

//由於未傳入初始值,所以開始max的值為數組第一項2,num的值為數組第二項5,取兩值最大值后繼續進入下一輪回調。

3. 數組去重

var newArr = arr.reduce((prev,cur)=>{
   prev.indexOf(cur) === -1 && prev.push(cur) 
   return prev
},[])

實現的基本原理如下:

1. 初始化一個空數組
2. 將需要去重處理的數組中的第一項在初始化數組中查找,如果找不到(空數組中肯定找不到),就將該項添加到初始化數組中
3. 將需要去重處理的數組中的第二項在初始化數組中查找,如果找不到,就將該項繼續添加到初始化數組中
4. ......
5.  將需要去重處理的數組中的第n項在初始化數組中查找,如果找不到,就想該項繼續添加到初始化數組中
6. 將這個初始化數組返回

 

總結:

reduce()是數組的歸並方法,與forEach()、map()、filter()等迭代方法一樣都會對數組每一項進行遍歷,但是reduce()可同時將前面數組項遍歷產生的結果與當前遍歷項進行運算,只一點是其他迭代方法無法企及的

 

內容轉載:https://www.jianshu.com/p/541b84c9df90


免責聲明!

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



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