js陣列方法之Reduce
reduce()和reduceRight()方法使用指定的函式將陣列元素進行組合,生成單個值,這個生成單個值很重要,開發過程中往往會用到這個值。這在函數語言程式設計中是常見的操作,通常被稱為“注入”和“摺疊”。
下面先舉例說明一下reduce是如何工作的:
[JavaScript] 純文字檢視 複製程式碼var a = [1,2,3,4,5]; var sum = a.reduce((x,y) => x+y, 0); // 陣列求和 var product = a.reduce((x,y) => x*y, 1); // 陣列求積 var max = a.reduce((x,y) => (x>y) ? x : y); // 求最大值
reduce()需要兩個引數。第一個是執行化簡操作的函式。華簡函式的任務就是用某種方法把兩個值組合或化簡為一個值,並返回化簡後的值。在上述的例子中,函式通過加法,乘法或取最大值法的方法組合兩個值。第二個引數是一個傳遞給函式的初始值,此引數是可選的,不傳的時候,預設是將陣列的第一個作為初始值使用。
reduce()使用的函式與forEach()和map()使用的函式不同。比較熟悉的是,陣列元素、元素的索引和陣列本身將作為第2~4個引數傳遞給函式。第一個引數是到目前為止的華簡操作累積的結果。第一次呼叫函式時,第一個引數是一個初始值,它就是傳遞給reduce()的第二個引數。
另外一點需要我們注意,那就是在空陣列上,不帶初始值引數呼叫reduce()將導致型別錯誤異常。如果呼叫它的時候只有一個值——陣列只有一個元素並且沒指定初始值,或者一個空陣列並且指定一個初始值——reduce()只是簡單地返回那個值而不會呼叫化簡函式。
reduceRight()函式的工作原理跟reduce()一樣,不同的是它按照的陣列索引的從高到低處理陣列。
下面舉個使用reduce()函式能快速解決問題的例子,題目如下:
一個無序陣列裡有若干個正整數,範圍從1到100,其中99個整數都出現了偶數次,只有一個整數出現了奇數次(比如1,1,2,2,3,3,4,5,5),如何找到這個出現奇數次的整數?
使用reduce()函式就很簡單的得到結果了
[JavaScript] 純文字檢視 複製程式碼var arr = [1,1,2,2,3,3,4,5,5] arr.reduce((x,y) => x^y); // 即可得到答案 4
總結:
為了簡單起見,為目前為止,所展示的例子都是數值,但數學的計算不是reduce()和reduceRight()唯一意圖。這兩個函式可以結合其他函式可以達到意想不到的結果,而且在效能上也可能有大提升。
相關文章
- 陣列reduce()方法陣列
- js--陣列的reduce()方法的使用介紹JS陣列
- [譯] 圖解 Map、Reduce 和 Filter 陣列方法圖解Filter陣列
- Javascript中陣列方法reduce的妙用之處JavaScript陣列
- js 陣列方法JS陣列
- 陣列的reduce操作+物件陣列的map操作陣列物件
- Js陣列方法解析JS陣列
- js常用陣列方法JS陣列
- JS陣列基本方法JS陣列
- js陣列方法集合JS陣列
- JS陣列的方法JS陣列
- JS陣列方法收集JS陣列
- JS中reduce方法JS
- 陣列的forEach,map,filter,reduce,reduceRight,every,some方法陣列Filter
- JS陣列方法總結JS陣列
- js陣列方法(管飽)JS陣列
- JS陣列字串方法整理JS陣列字串
- js常用的陣列方法JS陣列
- JS 陣列的迭代方法JS陣列
- js陣列方法詳解JS陣列
- js 陣列的方法小結JS陣列
- js陣列常用方法總結JS陣列
- JS-陣列方法總結JS陣列
- js陣列常見迭代方法JS陣列
- js陣列和字串的方法JS陣列字串
- js 物件轉為js陣列 && Object方法JS物件陣列Object
- 陣列的 map, filter ,sort和 reduce 用法陣列Filter
- JavaScript 之 物件/JSON/陣列JavaScript物件JSON陣列
- js之reduce的最全用法JS
- 陣列方法之滿漢全席陣列
- 【JS】JS陣列新增元素的三種方法JS陣列
- JS 陣列中常用方法總結JS陣列
- js陣列迴圈方法對比JS陣列
- js中陣列常用方法總結JS陣列
- js陣列操作方法小結JS陣列
- js陣列方法詳解(最新最全)JS陣列
- JS陣列去重7種方法JS陣列
- JS] JS 之刪除陣列中的元素JS陣列