javascript中reduce和reduceRight的區(qū)別
1. 遍歷順序
- reduce:從左到右遍歷數(shù)組(從第一個(gè)元素到最后一個(gè)元素)。
- reduceRight:從右到左遍歷數(shù)組(從最后一個(gè)元素到第一個(gè)元素)。
2. 使用場(chǎng)景
- reduce:適用于從左到右的累積操作,例如求和、拼接字符串等。
- reduceRight:適用于從右到左的累積操作,例如反轉(zhuǎn)字符串、從后向前處理數(shù)據(jù)等。
3. 示例對(duì)比
(1)求和
reduce:
const arr = [1, 2, 3, 4]; const sum = arr.reduce((acc, item) => acc + item, 0); console.log(sum); // 輸出: 10
reduceRight:
const arr = [1, 2, 3, 4]; const sum = arr.reduceRight((acc, item) => acc + item, 0); console.log(sum); // 輸出: 10
說(shuō)明:對(duì)于求和操作,
reduce和reduceRight的結(jié)果是相同的,因?yàn)榧臃M足交換律。
(2)拼接字符串
reduce:
const arr = ['a', 'b', 'c', 'd']; const result = arr.reduce((acc, item) => acc + item, ''); console.log(result); // 輸出: "abcd"
reduceRight:
const arr = ['a', 'b', 'c', 'd']; const result = arr.reduceRight((acc, item) => acc + item, ''); console.log(result); // 輸出: "dcba"
說(shuō)明:
reduce從左到右拼接字符串,結(jié)果為"abcd";reduceRight從右到左拼接字符串,結(jié)果為"dcba"。
(3)處理嵌套結(jié)構(gòu)
reduce:
const arr = [[1, 2], [3, 4], [5, 6]]; const flattened = arr.reduce((acc, item) => acc.concat(item), []); console.log(flattened); // 輸出: [1, 2, 3, 4, 5, 6]
reduceRight:
const arr = [[1, 2], [3, 4], [5, 6]]; const flattened = arr.reduceRight((acc, item) => acc.concat(item), []); console.log(flattened); // 輸出: [5, 6, 3, 4, 1, 2]
說(shuō)明:reduce 從左到右扁平化數(shù)組,結(jié)果為 [1, 2, 3, 4, 5, 6];reduceRight 從右到左扁平化數(shù)組,結(jié)果為 [5, 6, 3, 4, 1, 2]。
(4)處理函數(shù)組合
reduce:
const functions = [ (x) => x + 1, // f(x) = x + 1 (x) => x * 2, // g(x) = x * 2 (x) => x - 3 // h(x) = x - 3 ]; const result = functions.reduce((acc, fn) => fn(acc), 5); console.log(result); // 輸出: 9
執(zhí)行過(guò)程:
初始值:
(x) => x(恒等函數(shù))。第一次組合:
(x) => (x + 1)。第二次組合:
(x) => ((x + 1) * 2)。第三次組合:
(x) => (((x + 1) * 2) - 3)。
最終組合函數(shù)為:(x) => (((x + 1) * 2) - 3)。
reduceRight:
const functions = [ (x) => x + 1, // f(x) = x + 1 (x) => x * 2, // g(x) = x * 2 (x) => x - 3 // h(x) = x - 3 ]; const result = functions.reduceRight((acc, fn) => fn(acc), 5); console.log(result); // 輸出: 5
執(zhí)行過(guò)程:
初始值:
(x) => x(恒等函數(shù))。第一次組合:
(x) => (x - 3)。第二次組合:
(x) => ((x - 3) * 2)。第三次組合:
(x) => (((x - 3) * 2) + 1)。
最終組合函數(shù)為:(x) => (((x - 3) * 2) + 1)。
4. 總結(jié)對(duì)比
| 特性 | reduce | reduceRight |
|---|---|---|
| 遍歷順序 | 從左到右(從第一個(gè)元素到最后一個(gè)元素) | 從右到左(從最后一個(gè)元素到第一個(gè)元素) |
| 返回值 | 累積的結(jié)果值 | 累積的結(jié)果值 |
| 適用場(chǎng)景 | 從左到右的累積操作(如求和、拼接字符串) | 從右到左的累積操作(如反轉(zhuǎn)字符串、函數(shù)組合) |
| 是否改變?cè)瓟?shù)組 | 不會(huì)改變?cè)瓟?shù)組(除非在回調(diào)中顯式修改對(duì)象) | 不會(huì)改變?cè)瓟?shù)組(除非在回調(diào)中顯式修改對(duì)象) |
5. 如何選擇?
- 如果需要從左到右處理數(shù)組,使用
reduce。 - 如果需要從右到左處理數(shù)組,使用
reduceRight。
到此這篇關(guān)于javascript中reduce和reduceRight的區(qū)別的文章就介紹到這了,更多相關(guān)javascript reduce和reduceRight區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript動(dòng)畫系列之模擬滾動(dòng)條
本文主要介紹了js動(dòng)畫模擬滾動(dòng)條的實(shí)現(xiàn)原理以及分享了通過(guò)滾動(dòng)條實(shí)現(xiàn)的幾個(gè)應(yīng)用的實(shí)例代碼:1.通過(guò)移動(dòng)滾動(dòng)條來(lái)實(shí)現(xiàn)數(shù)字的加減;2.通過(guò)拖動(dòng)滾動(dòng)條來(lái)實(shí)現(xiàn)元素尺寸的變化,以改變?cè)貙挾葹槔?3.通過(guò)拖動(dòng)滾動(dòng)條來(lái)實(shí)現(xiàn)內(nèi)容滾。需要的朋友一起來(lái)看下吧2016-12-12
JS實(shí)現(xiàn)隨機(jī)化快速排序的實(shí)例代碼
這篇文章介紹了JS實(shí)現(xiàn)隨機(jī)化快速排序的實(shí)例代碼,有需要的朋友可以參考一下2013-08-08
JavaScript中字符串與Unicode編碼互相轉(zhuǎn)換的實(shí)現(xiàn)方法
這篇文章主要介紹了JavaScript中字符串與Unicode編碼互相轉(zhuǎn)換的實(shí)現(xiàn)方法涉及JavaScript編碼、數(shù)據(jù)類型等的轉(zhuǎn)換技巧,需要的朋友可以參考下2015-12-12
bootstrap-datetimepicker實(shí)現(xiàn)只顯示到日期的方法
這篇文章主要介紹了bootstrap-datetimepicker實(shí)現(xiàn)只顯示到日期的方法,涉及bootstrap插件相關(guān)操作的設(shè)置與使用技巧,需要的朋友可以參考下2016-11-11
js鼠標(biāo)移動(dòng)時(shí)禁止選中文字
本文主要介紹了js鼠標(biāo)移動(dòng)時(shí)禁止選中文字的方法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
一個(gè)用js實(shí)現(xiàn)過(guò)濾重復(fù)字符的函數(shù)
一個(gè)用js實(shí)現(xiàn)過(guò)濾重復(fù)字符的函數(shù)...2007-08-08
JS實(shí)現(xiàn)同一DOM元素上onClick事件與onDblClick事件并存的解決方法
這篇文章主要介紹了JS實(shí)現(xiàn)同一DOM元素上onClick事件與onDblClick事件并存的解決方法,結(jié)合實(shí)例形式分析了javascript通過(guò)針對(duì)單擊onclick事件增加定時(shí)器進(jìn)行onClick事件與onDblClick事件的區(qū)別判定操作,需要的朋友可以參考下2018-06-06

