JS 数组的reduce()用法小结
第一次關(guān)注reduce()是在對象數(shù)組去重里。
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
},[])
上面代碼是從數(shù)組arr里去掉重復(fù)id的元素。
arr.reduce(func(),[])傳入了兩個參數(shù):匿名函數(shù)和空數(shù)組[]。
在匿名函數(shù)里的兩個參數(shù):cur指累積變量,next指被遍歷的數(shù)組元素。
如果沒有指定參數(shù)-空數(shù)組[],累積變量cur默認(rèn)是第一個元素的值
在指定參數(shù)空數(shù)組后,累積變量cur的初始值就變成了空數(shù)組。
所以上面代碼就是判斷hash對象里是否已存入了當(dāng)前arr數(shù)組元素的id,如果存入了,則遍歷下一個元素,并把第一次存入時的元素添加到累積變量cur里。這樣最后函數(shù)返回的就是去掉重復(fù)id的數(shù)組。
上面是reduce()的一個應(yīng)用。下面是關(guān)于reduce()的基本介紹: 參考阮大神的介紹,reduce()對數(shù)組進(jìn)行了:遍歷、變形和累積操作。前提是累積變量初始值為數(shù)組。具體看下面例子:
var arr = [0,1,2,3,4]
var handler = function(item,next){
item.push(next+1)
return item
}
arr.reduce(handler(),[])
//輸出結(jié)果是:[1,2,3,4,5]
首先,reduce()對數(shù)組arr進(jìn)行了遍歷
其次,經(jīng)過reduce()處理的數(shù)組被修改。類似map()函數(shù)
最后,通過item這個累積變量,把所有元素累積在一起。這個例子里是通過push方法。
其實更能體現(xiàn)reduce()累積作用的例子是下面這個:
`
var arr = [0,1,2,3,4]
var summary = arr.reduce(function(sum,n){
sum += n
return sum
},0)
console.log(summary)
//輸出結(jié)果為:10
`
上面代碼里,arr數(shù)組的每個成員被遍歷求和。sum作為累積變量,初始值是0.
如果不提供第二個參數(shù)0,sum初始值也會默認(rèn)為arr的第一個元素即0。
同理,對于數(shù)組的階乘,可以很方便的使用如下代碼做到:
var arr = [1,2,3,4,5]
var times = arr.reduce(function(res,n){
res *= n
return res;
})
console.log(times)
//輸出結(jié)果為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
總結(jié)
以上是生活随笔為你收集整理的JS 数组的reduce()用法小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【FCC】Boo who(BOOL类型检
- 下一篇: 【FCC】Sorted Union(排序