js中的reduce()函數(shù)講解
定義:
reduce() 方法接收一個(gè)函數(shù)作為累加器,數(shù)組中的每個(gè)值(從左到右)開(kāi)始縮減,最終計(jì)算為一個(gè)值。對(duì)空數(shù)組是不會(huì)執(zhí)行回調(diào)函數(shù)的。
案例
1.數(shù)組求和
// 1.數(shù)組求和 var arr = [1,5,8,6,15,78,65,25,48,55] var sum = arr.reduce(function(total,currentValue){ return total+currentValue; }); console.log(sum);//306 var eachSum = 0; arr.forEach(function(currentValue){ eachSum += currentValue; }) console.log(eachSum);//306
2.合并二維數(shù)組
//2.合并二維數(shù)組 var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']]; var oneArr = twoArr.reduce(function(total,currentValue){ // console.log(total) return total.concat(currentValue); }) console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]
3.統(tǒng)計(jì)一個(gè)數(shù)組中有多少個(gè)不重復(fù)的單詞:
//3.統(tǒng)計(jì)一個(gè)數(shù)組中有多少個(gè)不重復(fù)的單詞: // 不用reduce時(shí): var arr = ["apple","orange","apple","orange","pear","orange"]; function getWordCnt(){ var obj = {}; for(var i= 0, l = arr.length; i< l; i++){ var item = arr[i]; obj[item] = (obj[item] +1 ) || 1; } return obj; } console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1} // 用reduce時(shí): var arr = ["apple","orange","apple","orange","pear","orange"]; function getWordCnt(){ return arr.reduce(function(prev,next){ prev[next] = (prev[next] + 1) || 1; return prev; },{}); } console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}
4.對(duì)reduce的理解:
reduce(callback,initiaValue)會(huì)傳入兩個(gè)變量,回調(diào)函數(shù)(callback)和初始值(initiaValue)。
假設(shè)函數(shù)有個(gè)傳入?yún)?shù),prev和next,index和array。 Prev和next是你必須要了解的。
當(dāng)沒(méi)有傳入初始值時(shí),prev是從數(shù)組中第一個(gè)元素開(kāi)始的,next是第二個(gè)函數(shù)。
但是當(dāng)傳入初始值(initiaValue)后,第一個(gè)prev將是initivalValue,next將是數(shù)組中的第一個(gè)元素。
比如:
// 4.對(duì)reduce的理解: var arr = ["apple","orange"]; function noPassValue(){ return arr.reduce(function(prev,next){ console.log("prev:",prev); console.log("next:",next); return prev; }); } function passValue(){ return arr.reduce(function(prev,next){ console.log("prev:",prev); console.log("next:",next); prev[next] = 1; return prev; },{}); } console.log("No Additional parameter:",noPassValue()); console.log("----------------"); console.log("With {} as an additional parameter:",passValue()); /* VM415673:4 prev: apple VM415673:5 next: orange VM415673:4 prev: apple VM415673:5 next: orange VM415673:19 No Additional parameter: apple VM415673:20 ---------------- VM415673:13 prev: {} VM415673:14 next: apple VM415673:13 prev: {apple: 1} VM415673:14 next: orange VM415673:21 With {} as an additional parameter: {apple: 1, orange: 1} */
若有不足請(qǐng)多多指教!希望給您帶來(lái)幫助!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- JavaScript中reduce()方法的使用詳解
- 詳解JavaScript中數(shù)組的reduce方法
- 詳解JS數(shù)組Reduce()方法詳解及高級(jí)技巧
- js數(shù)組方法reduce經(jīng)典用法代碼分享
- JS使用reduce()方法處理樹(shù)形結(jié)構(gòu)數(shù)據(jù)
- JavaScript中自帶的 reduce()方法使用示例詳解
- JavaScript中reduce()的5個(gè)基本用法示例
- JavaScript中reduce()詳解及使用方法
- JS數(shù)組方法reduce的妙用分享
- JavaScript中的reduce方法執(zhí)行過(guò)程、使用場(chǎng)景及進(jìn)階用法
相關(guān)文章
利用Bootstrap Multiselect實(shí)現(xiàn)下拉框多選功能
這篇文章主要介紹了利用Bootstrap Multiselect實(shí)現(xiàn)下拉框多選功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04GitHub上一些實(shí)用的JavaScript的文件壓縮解壓縮庫(kù)推薦
這篇文章主要介紹了GitHub上一些實(shí)用的JavaScript的文件壓縮解壓縮庫(kù)推薦,推薦的這幾個(gè)都是支持zip格式的,需要的朋友可以參考下2016-03-03分享一個(gè)自己寫(xiě)的table表格排序js插件(高效簡(jiǎn)潔)
在前不久做的一個(gè)web項(xiàng)目中,需要實(shí)現(xiàn)js表格排序的效果,當(dāng)時(shí)為了省事,就在網(wǎng)上找了幾個(gè)相關(guān)的js插件2011-10-10動(dòng)態(tài)加載JavaScript文件的3種方式
第一種是使用document.write/writeln()方式,第二種使用jQuery,第三種是使用原生js方法,感興趣的小伙伴們可以參考一下2018-05-05javascript獲取隱藏元素(display:none)的高度和寬度的方法
這篇文章主要介紹了javascript獲取隱藏元素(display:none)的高度和寬度的方法,實(shí)現(xiàn)方法比較復(fù)雜,需要的朋友可以參考下2014-06-06js實(shí)現(xiàn)防止用戶重復(fù)點(diǎn)擊的三種方法
本文主要介紹了js實(shí)現(xiàn)防止用戶重復(fù)點(diǎn)擊的三種方法,包括通過(guò)禁用按鈕、解綁點(diǎn)擊事件和使用標(biāo)記,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02JS實(shí)現(xiàn)獲取當(dāng)前URL和來(lái)源URL的方法
這篇文章主要介紹了JS實(shí)現(xiàn)獲取當(dāng)前URL和來(lái)源URL的方法,涉及javascript針對(duì)頁(yè)面document屬性操作的相關(guān)技巧,需要的朋友可以參考下2016-08-08JS實(shí)現(xiàn)圖片高斯模糊切換效果的焦點(diǎn)圖實(shí)例
這篇文章主要給大家介紹了利用原生JS如何實(shí)現(xiàn)圖片高斯模糊切換效果的焦點(diǎn)圖,文中給出了完整的實(shí)例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,下面來(lái)一起看看吧。2017-01-01