javascript中reduce和reduceRight的區(qū)別
1. 遍歷順序
- reduce:從左到右遍歷數(shù)組(從第一個元素到最后一個元素)。
- reduceRight:從右到左遍歷數(shù)組(從最后一個元素到第一個元素)。
2. 使用場景
- reduce:適用于從左到右的累積操作,例如求和、拼接字符串等。
- reduceRight:適用于從右到左的累積操作,例如反轉(zhuǎn)字符串、從后向前處理數(shù)據(jù)等。
3. 示例對比
(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
說明:對于求和操作,
reduce和reduceRight的結(jié)果是相同的,因為加法滿足交換律。
(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"
說明:
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]
說明: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í)行過程:
初始值:
(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í)行過程:
初始值:
(x) => x(恒等函數(shù))。第一次組合:
(x) => (x - 3)。第二次組合:
(x) => ((x - 3) * 2)。第三次組合:
(x) => (((x - 3) * 2) + 1)。
最終組合函數(shù)為:(x) => (((x - 3) * 2) + 1)。
4. 總結(jié)對比
| 特性 | reduce | reduceRight |
|---|---|---|
| 遍歷順序 | 從左到右(從第一個元素到最后一個元素) | 從右到左(從最后一個元素到第一個元素) |
| 返回值 | 累積的結(jié)果值 | 累積的結(jié)果值 |
| 適用場景 | 從左到右的累積操作(如求和、拼接字符串) | 從右到左的累積操作(如反轉(zhuǎn)字符串、函數(shù)組合) |
| 是否改變原數(shù)組 | 不會改變原數(shù)組(除非在回調(diào)中顯式修改對象) | 不會改變原數(shù)組(除非在回調(diào)中顯式修改對象) |
5. 如何選擇?
- 如果需要從左到右處理數(shù)組,使用
reduce。 - 如果需要從右到左處理數(shù)組,使用
reduceRight。
到此這篇關(guān)于javascript中reduce和reduceRight的區(qū)別的文章就介紹到這了,更多相關(guān)javascript reduce和reduceRight區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript中字符串與Unicode編碼互相轉(zhuǎn)換的實現(xiàn)方法
這篇文章主要介紹了JavaScript中字符串與Unicode編碼互相轉(zhuǎn)換的實現(xiàn)方法涉及JavaScript編碼、數(shù)據(jù)類型等的轉(zhuǎn)換技巧,需要的朋友可以參考下2015-12-12
bootstrap-datetimepicker實現(xiàn)只顯示到日期的方法
這篇文章主要介紹了bootstrap-datetimepicker實現(xiàn)只顯示到日期的方法,涉及bootstrap插件相關(guān)操作的設(shè)置與使用技巧,需要的朋友可以參考下2016-11-11
一個用js實現(xiàn)過濾重復(fù)字符的函數(shù)
一個用js實現(xiàn)過濾重復(fù)字符的函數(shù)...2007-08-08
JS實現(xiàn)同一DOM元素上onClick事件與onDblClick事件并存的解決方法
這篇文章主要介紹了JS實現(xiàn)同一DOM元素上onClick事件與onDblClick事件并存的解決方法,結(jié)合實例形式分析了javascript通過針對單擊onclick事件增加定時器進行onClick事件與onDblClick事件的區(qū)別判定操作,需要的朋友可以參考下2018-06-06

