JS 数组的reduce()用法小结
第一次關注reduce()是在對象數組去重里。
var arr = [{name:'Thor',id:1},{name:'Locki',id:1},{name:'Tony',id:2}]
var hash= {}
arr = arr.reduce(function(cur,next){
hash[next.id]?'':hash[next.id]===true&&cur.push(next)
return cur
},[])
上面代碼是從數組arr里去掉重復id的元素。
arr.reduce(func(),[])傳入了兩個參數:匿名函數和空數組[]。
在匿名函數里的兩個參數:cur指累積變量,next指被遍歷的數組元素。
如果沒有指定參數-空數組[],累積變量cur默認是第一個元素的值
在指定參數空數組后,累積變量cur的初始值就變成了空數組。
所以上面代碼就是判斷hash對象里是否已存入了當前arr數組元素的id,如果存入了,則遍歷下一個元素,并把第一次存入時的元素添加到累積變量cur里。這樣最后函數返回的就是去掉重復id的數組。
上面是reduce()的一個應用。下面是關于reduce()的基本介紹: 參考阮大神的介紹,reduce()對數組進行了:遍歷、變形和累積操作。前提是累積變量初始值為數組。具體看下面例子:
var arr = [0,1,2,3,4]
var handler = function(item,next){
item.push(next+1)
return item
}
arr.reduce(handler(),[])
//輸出結果是:[1,2,3,4,5]
首先,reduce()對數組arr進行了遍歷
其次,經過reduce()處理的數組被修改。類似map()函數
最后,通過item這個累積變量,把所有元素累積在一起。這個例子里是通過push方法。
其實更能體現reduce()累積作用的例子是下面這個:
`
var arr = [0,1,2,3,4]
var summary = arr.reduce(function(sum,n){
sum += n
return sum
},0)
console.log(summary)
//輸出結果為:10
`
上面代碼里,arr數組的每個成員被遍歷求和。sum作為累積變量,初始值是0.
如果不提供第二個參數0,sum初始值也會默認為arr的第一個元素即0。
同理,對于數組的階乘,可以很方便的使用如下代碼做到:
var arr = [1,2,3,4,5]
var times = arr.reduce(function(res,n){
res *= n
return res;
})
console.log(times)
//輸出結果為120
不知道看完上面介紹,您有沒有掌握reduce()的簡單使用呢?
如果有興趣了解的更多,請參考阮大神的博客:
http://www.ruanyifeng.com/blog/2017/03/reduce_transduce.html
---------------------
作者:keep_and_be_simple
原文:https://blog.csdn.net/qq_39527734/article/details/78828398
總結
以上是生活随笔為你收集整理的JS 数组的reduce()用法小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【FCC】Boo who(BOOL类型检
- 下一篇: 【FCC】Sorted Union(排序