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()可同時將前面數組項遍歷產生的結果與當前遍歷項進行運算,只一點是其他迭代方法無法企及的