精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript 數組 reduce 總是不會用?看看這 5 個例子就懂了!

開發 前端
相信不少初學者曾經都被 JavaScript 數組的 reduce方法困擾過,一直搞不明白到底怎么用。reduce方法是按順序對數組每個元素執行某個函數,這個函數接收上一次執行結果作為參數,并將結果傳給下一次調用。

[[355931]]

相信不少初學者曾經都被 JavaScript 數組的 reduce方法困擾過,一直搞不明白到底怎么用。reduce方法是按順序對數組每個元素執行某個函數,這個函數接收上一次執行結果作為參數,并將結果傳給下一次調用。reduce方法用得好可以簡化復雜的邏輯,提高代碼可讀性。通過下面幾個例子可以幫你快速理解reduce的用法。

1.數字數組求和

這是reduce最常見的入門級例子。如果用傳統的for循環是這樣的:

 

  1. function sum(arr) { 
  2.   let sum = 0; 
  3.   for (const val of arr) { 
  4.     sum += val; 
  5.   } 
  6.   return sum
  7.  
  8. sum([1, 3, 5, 7]); // 16 

如果用 reduce():

 

  1. function sum(arr) { 
  2.   const reducer = (sum, val) => sum + val; 
  3.   const initialValue = 0; 
  4.   return arr.reduce(reducer, initialValue); 
  5.  
  6. sum([1, 3, 5, 7]); // 16 

reduce()函數的第一個參數是一個reducer函數,第二個參數是初始值。在每個數組元素上執行reducer函數,第一個參數是“累進值”。累進值的初始值是initialValue,并且在每一輪調用后更新為reducer函數的返回值。

為了幫助理解,可以用for循環實現一個簡單的reduce()函數:

 

  1. function reduce(arr, reducer, initialValue) { 
  2.   let accumulator = initialValue; 
  3.   for (const val of array) { 
  4.     accumulator = reducer(accumulator, val); 
  5.   } 
  6.   return accumulator; 

2.對象數組數字屬性值求和

單看 reduce() 本身,大家更多的感受是它的晦澀難懂,而不是有多好用。如果僅僅是為了給數字數組求和,用for循環可能來得更直觀。但是,當你把它跟其他數組方法(比如filter和map)結合使用時,才能感受到它的強大和方便。

舉個栗子,假設有個對象數組,每個對象都有個total屬性。對這些total求和:

 

  1. const lineItems = [ 
  2.   { description: 'Eggs (Dozen)', quantity: 1, price: 3, total: 3 }, 
  3.   { description: 'Cheese', quantity: 0.5, price: 5, total: 2.5 }, 
  4.   { description: 'Butter', quantity: 2, price: 6, total: 12 } 
  5. ]; 

用reduce可以這樣寫:

  1. lineItems.reduce((sum, li) => sum + li.total, 0); // 17.5 

這樣是能得到最終結果,但是代碼的可組合性就沒那么好,可以做些優化,把total屬性提前提取出來:

  1. lineItems.map(li => li.total).reduce((sum, val) => sum + val, 0); 

第二種方式為什么更好?因為這樣就可以把求和的邏輯抽象到一個單獨的函數sum()中,方便以后重用。

 

  1. //匯總 total  
  2. lineItems.map(li => li.total).reduce(sumReducer, 0); 
  3.  
  4. //  匯總 quantity 
  5. lineItems.map(li => li.quantity).reduce(sumReducer, 0); 
  6.  
  7. function sumReducer(sum, val) { 
  8.   return sum + val; 

這種抽象比較重要,因為你覺得 sumReducer() 邏輯不會變,其實不然。比如,這個求和邏輯并沒有考慮到0.1 + 0.2 !== 0.3的問題。(參考 為什么 0.1 + 0.2 = 0.300000004)如果有了這個抽象,要修復這個缺陷就比較方便了。比如:

 

  1. const { round } = require('lodash'); 
  2.  
  3. function sumReducer(sum, val) { 
  4.   // 保留2位小數 
  5.   return _.round(sum + val, 2); 

3.求最大值

reduce()通常用來求和,但它的功能遠不止這個。累進值accumulator 可以是任意值:數字,null,undefined,數組,對象等。

舉個栗子,假設有個日期數組,要找出最近的一個日期:

 

  1. const dates = [ 
  2.   '2019/06/01'
  3.   '2018/06/01'
  4.   '2020/09/01', // 這個是最近日期,但是怎么找到它? 
  5.   '2018/09/01' 
  6. ].map(v => new Date(v)); 

一種方法是給數組排序,找最后一個值。看上去可行,但是效率沒那么高,并且用數組的默認方法給日期對象排序其實是有點小問題的。不只是日期對象,任何類型的值在sort()方法中比較,都會默認先轉成字符串比較,最終結果可能并不是你想要的。

 

  1. const a = [4,1,13,2]; 
  2. // 驚不驚喜,意不意外? 
  3. a.sort(); // [1, 13, 2, 4] 

這里就可以用reduce()來處理:

 

  1. // 這里是用 `>` 和`<` 比較日期對象,因此不會有問題 
  2. const maxDate = dates.reduce((max, d) => d > max ? d : max, dates[0]); 

4.分組計數

假設有個對象數組,每個對象上有個age屬性:

 

  1. const characters = [ 
  2.   { name'Tom', age: 59 }, 
  3.   { name'Jack', age: 29 }, 
  4.   { name'Bruce', age: 29 } 
  5. ]; 

怎樣返回一個對象,包含每個age的人物角色數量?比如這樣: { 29: 2, 59: 1 }.

用 reduce() 的實現方式如下:

 

  1. const reducer = (map, val) => { 
  2.   map[val] = map[val] || 1; 
  3.   ++map[val]; 
  4.   return map; 
  5. }; 
  6. characters.map(char => char.age).reduce(reducer, {}); 

5.Promise 動態鏈式調用

假設你有一個異步函數數組,想要按順序執行:

 

  1. const functions = [ 
  2.   async function() { return 1; }, 
  3.   async function() { return 2; }, 
  4.   async function() { return 3; } 
  5. ]; 

如果是靜態的Promise代碼,我們直接在代碼里鏈式調用就行了。但如果是動態的Promise數組,可以用reduce串起來:

 

  1. // 最后 `res`的結果等價于`Promise.resolve().then(fn1).then(fn2).then(fn3)` 
  2. const res = await functions. 
  3.   reduce((promise, fn) => promise.then(fn), Promise.resolve()); 
  4. res; // 3 

當然,reduce 能做的事情還有很多,它本質上是對數組元素執行某種“累進”操作,最終返回單個值。

本文轉載自微信公眾號「1024譯站」,可以通過以下二維碼關注。轉載本文請聯系1024譯站公眾號。

 

責任編輯:武曉燕 來源: 1024譯站
相關推薦

2021-03-16 15:12:57

CompletableFuture機制java

2024-08-12 12:25:25

SpringMVC開發

2018-09-13 10:40:40

Linux命令find

2020-05-14 08:59:28

API網關性能

2024-09-09 08:36:36

Java操作遠程服務器

2020-09-01 14:17:03

WindowsDefender微軟

2020-12-18 09:45:33

DockerLinux命令

2022-02-22 08:25:51

typeScript泛型概念泛型使用

2020-09-27 06:50:56

Java互聯網注解

2020-11-09 09:03:35

高并發多線程ThreadLocal

2021-07-13 12:21:34

PythonRPC通信

2019-04-17 09:01:17

2012-05-02 15:38:49

金山快盤網盤

2025-08-18 02:15:00

2021-03-22 08:20:48

5G工業互聯網

2021-11-10 07:47:48

Traefik邊緣網關

2020-10-21 10:02:16

架構運維技術

2019-09-03 09:30:46

ss 命令SocketLinux

2017-09-19 19:07:00

ZStack混合云災備

2019-11-28 16:48:00

華為Mate X
點贊
收藏

51CTO技術棧公眾號

欧美三级午夜理伦| 色哟哟视频在线| 嫩草在线视频| 成人午夜精品一区二区三区| 欧美综合国产精品久久丁香| 91无套直看片红桃在线观看| 日韩激情综合| 91福利视频网站| 国产在线观看欧美| 国产人成在线观看| 岛国一区二区在线观看| 国产精品大片wwwwww| 看免费黄色录像| 久久av导航| 欧美不卡123| 欧美三级午夜理伦三级富婆| segui88久久综合9999| 中文字幕一区二区不卡| 欧美 日韩 国产在线| 国产偷拍一区二区| 日韩在线卡一卡二| 午夜精品久久久久久久99热| 人人干在线观看| 日韩深夜福利| 精品久久亚洲| 国产精品美女久久久久久久久久久| 亚洲精品免费在线视频| chinese国产精品| 欧美午夜a级限制福利片| 中文日韩在线观看| 性欧美13一14内谢| 精品深夜福利视频| 欧美一区二区三区的| www亚洲成人| 成人av免费电影网站| 亚洲一区二区美女| 日b视频免费观看| 国产黄大片在线观看画质优化| 久久久综合网站| 精品人伦一区二区三区 | 欧美日韩国产天堂| 免费在线观看日韩视频| 国产乱码在线| 亚洲愉拍自拍另类高清精品| 大桥未久一区二区| 黄色网址视频在线观看| 日韩毛片视频在线看| 亚洲欧美日韩另类精品一区二区三区| 国产一二三区在线视频| 91久色porny| 久久国产精品-国产精品| 国产成人三级在线观看视频| 国产91综合网| 99在线国产| 亚洲乱码在线观看| 国产91对白在线观看九色| 99热在线播放| 欧美一级特黄aaaaaa| www..com久久爱| 久久99精品久久久久久青青日本 | 久久精品男人的天堂| 蜜桃麻豆www久久国产精品| 青青草在线视频免费观看| 91在线视频播放地址| 久久久亚洲综合网站| 九色在线观看| 中文字幕中文字幕中文字幕亚洲无线| 亚洲视频在线观看日本a| 欧洲美女少妇精品| 亚洲精品免费看| 男女激情免费视频| 中老年在线免费视频| 欧洲精品视频在线观看| 国产一级免费大片| 超碰成人福利| 亚洲精品综合精品自拍| 国产1区2区在线观看| 亚洲高清影视| 17婷婷久久www| 最近中文字幕av| 国产精品一卡二卡| 久久日韩精品| 日本美女高清在线观看免费| 亚洲美女淫视频| 国产精品后入内射日本在线观看| 婷婷午夜社区一区| 欧美一区二区三区四区五区| 亚洲制服丝袜在线播放| 郴州新闻综合频道在线直播| 久热精品视频在线免费观看 | 欧美主播一区二区三区| 亚洲女人在线观看| 亚洲理论电影| 日韩在线播放av| 日本一二三区不卡| 老司机午夜精品| 国产精品午夜av在线| 高清日韩av电影| 亚洲最大成人综合| www亚洲成人| 另类ts人妖一区二区三区| 丝袜美腿精品国产二区| www.国产高清| 国产在线国偷精品免费看| 久久久久九九九| av网站在线免费| 色婷婷综合五月| 久久久久亚洲av无码网站| 国产精品一区二区av日韩在线| 久久综合色88| japanese国产在线观看| 成人白浆超碰人人人人| 一级全黄肉体裸体全过程| 最新中文字幕在线播放| 欧美成人福利视频| 日韩在线视频免费看| 男人的天堂成人在线| 99蜜桃在线观看免费视频网站| 超碰免费在线| 色婷婷久久综合| 无码av免费精品一区二区三区| 欧美xxxxx视频| 日韩av手机在线看| 无码国产伦一区二区三区视频| 亚洲人成网站色在线观看| 亚洲三级视频网站| 最新国产精品视频| 午夜精品一区二区三区在线| 99热这里只有精品在线观看| 国产精品欧美一级免费| 日韩欧美在线免费观看视频| 西野翔中文久久精品国产| 久久久亚洲精品视频| 国产露脸国语对白在线| 国产精品夫妻自拍| 手机视频在线观看| 波多野结衣在线观看一区二区三区| 78m国产成人精品视频| 黄色a在线观看| 一区二区欧美国产| 成年人性生活视频| 永久91嫩草亚洲精品人人| 国产精品无码专区在线观看| 北岛玲一区二区三区| 欧美性猛片xxxx免费看久爱| 免费在线观看污| 日日欢夜夜爽一区| 久久精品国产综合精品| 午夜影院在线观看国产主播| 日韩精品在线观看网站| 国产又爽又黄的视频| 2020日本不卡一区二区视频| 18禁免费无码无遮挡不卡网站| 欧美午夜18电影| 欧美亚洲视频在线观看| 男人av在线| 日本久久精品电影| 四虎成人免费影院| 九九视频精品免费| 亚洲精品天堂成人片av在线播放| 999久久久精品一区二区| 久久久久久亚洲精品不卡| 人妻一区二区三区免费| 韩曰欧美视频免费观看| 免费视频91蜜桃| 精品一区二区三区视频 | 国产主播av在线| 久久99精品国产.久久久久 | 色综合999| 亚洲精品电影久久久| 青青青国产在线| 国产精品美女久久久久aⅴ| 超碰在线资源站| 一区二区自拍| 日本电影一区二区三区| 四虎精品一区二区免费| 欧美大片在线免费观看| 日本电影一区二区在线观看| 欧美三级在线看| 美国黄色小视频| 久久先锋影音av鲁色资源| 蜜臀av免费观看| 亚洲午夜视频| 日韩精品最新在线观看| 经典三级久久| 国产91精品不卡视频| 午夜免费福利在线观看| 精品国产91乱码一区二区三区| 亚洲欧美精品一区二区三区| 国产精品成人免费在线| jlzzjizz在线播放观看| 毛片基地黄久久久久久天堂| 欧美亚洲色图视频| 成人久久电影| 国产精品国产亚洲精品看不卡15| 成人在线爆射| 欧美国产精品日韩| 成年人视频在线看| 亚洲大尺度美女在线| 国产又大又长又粗| 欧美日韩亚洲激情| 欧美日韩亚洲国产另类| 国产精品三级在线观看| 亚洲黄色免费在线观看| 激情综合亚洲精品| 日韩一级在线免费观看| 一区在线视频观看| 亚洲精品美女久久7777777| 久草在线综合| 亚洲自拍偷拍网址| 本网站久久精品| 欧美一级片在线播放| 1769免费视频在线观看| 色妞久久福利网| 国产在线你懂得| 亚洲精品一区二三区不卡| 亚洲AV无码乱码国产精品牛牛 | 久久艹这里只有精品| 日本亚洲最大的色成网站www| 亚洲色成人www永久在线观看 | 欧美人妖在线观看| 3d动漫精品啪啪一区二区三区免费| 高清av一区| 日韩美女视频在线观看| 美女在线视频免费| 久久久久久久国产精品视频| 成人video亚洲精品| www亚洲欧美| 成年人在线视频| 亚洲性夜色噜噜噜7777| 撸视在线观看免费视频| 亚洲男人天堂网站| 蜜桃视频在线观看视频| 日韩不卡中文字幕| 天天综合在线视频| 亚洲国产成人精品女人久久久 | 久久国产精品免费精品3p| av在线不卡观看| 欧美片网站免费| 亚洲自拍偷拍一区| 中文在线综合| 国产精华一区| 风间由美性色一区二区三区四区| 国产精品swag| 精品欧美午夜寂寞影院| 久久久99爱| 免费观看不卡av| 日韩福利视频| 日韩欧美网站| 中文字幕日韩一区二区三区| 五月激情久久久| 成年人三级视频| 国产精品99免费看| 800av在线免费观看| 精品动漫一区| 日本三级免费观看| 日韩精品国产精品| 91亚洲免费视频| 国产一区二区伦理片| 亚洲欧美综合视频| 99久久综合99久久综合网站| 男生裸体视频网站| 久久人人爽人人爽| 五月激情四射婷婷| 亚洲黄色av一区| 国产精品免费av一区二区| 91传媒视频在线播放| 91亚洲欧美激情| 精品国产乱码久久久久久夜甘婷婷| 天堂av手机版| 国产一区二区免费| 黄在线免费观看| 欧美精品久久久久a| 最近在线中文字幕| 成人激情综合网| a看欧美黄色女同性恋| 欧美日韩高清在线一区| 色777狠狠狠综合伊人| 久艹在线免费观看| 日韩精品每日更新| 色婷婷狠狠18禁久久| 久久久精品日韩欧美| 国产激情无码一区二区三区| 亚洲国产精品久久一线不卡| 午夜精品久久久久久久蜜桃| 欧美一级xxx| 欧美拍拍视频| 美女999久久久精品视频| 无码小电影在线观看网站免费| 国产精品亚洲视频在线观看| 一区视频网站| 亚洲福利av在线| 亚洲精品护士| 国产免费中文字幕| 91免费观看视频在线| 国产97免费视频| 一本大道久久a久久精二百| 国产美女主播在线观看| 亚洲欧美国产va在线影院| 色综合999| 成人h猎奇视频网站| 亚洲婷婷影院| 日韩小视频网站| 国内国产精品久久| 国产精品久久久久久久av| 亚洲成人激情av| 国产美女无遮挡永久免费| 国产一区二区三区在线视频 | 在线中文一区| av污在线观看| 久久久久久久久久久电影| 一区二区视频国产| 国产浮力第一页| 日韩大陆欧美高清视频区| gogogogo高清视频在线| 国产成人综合一区二区三区| 国产精品香蕉| 中文字幕一区二区三区四区五区人| 麻豆精品网站| 日韩aaaaa| 亚洲一区二区三区四区在线免费观看 | 91亚洲永久免费精品| 少妇精品久久久| 国产妇女馒头高清泬20p多| 国产美女精品在线| 久草福利资源在线| 欧美日韩精品久久久| 国内精品一区视频| 人人爽久久涩噜噜噜网站| 嫩草国产精品入口| 九九爱精品视频| 成人国产电影网| 国产无精乱码一区二区三区| 日韩视频免费观看高清完整版| 国产色在线观看| 成人国产精品一区二区| 成人免费在线观看av| 中文字幕第36页| 欧美极品少妇xxxxⅹ高跟鞋| 国产性生活视频| 国产香蕉一区二区三区在线视频| 无遮挡在线观看| 欧美日韩精品免费观看视一区二区| 99综合在线| 香蕉网在线播放| 色久优优欧美色久优优| 黄色大片在线看| 国产精品三级久久久久久电影| 精品国产精品| 牛夜精品久久久久久久| 国产精品午夜电影| 在线免费a视频| 久久精品美女视频网站| 日本一区二区三区播放| 成人国产在线看| 成人午夜电影小说| 丁香六月婷婷综合| 亚洲欧美中文字幕在线一区| 精品免费av在线 | а√中文在线8| 国产a一区二区| 亚洲自啪免费| 国产一二三四视频| 日韩美一区二区三区| av影院在线免费观看| 欧美日韩高清在线一区| 久久成人av少妇免费| 欧美爱爱小视频| 亚洲精品视频二区| 精品176极品一区| 激情成人开心网| 久久嫩草精品久久久久| 正在播放亚洲精品| 欧美精品在线观看| 青青一区二区| 日韩欧美国产片| 亚洲成人精品在线观看| jizz在线观看视频| 91|九色|视频| 午夜亚洲视频| 欧美三级在线免费观看| 日韩精品视频在线观看免费| 男人亚洲天堂| 黄色免费视频大全| 亚洲人午夜精品天堂一二香蕉| 无码国产精品一区二区色情男同| 国产精品久久久久久久久久久新郎| 亚洲精品成人无限看| www.自拍偷拍| 91精品啪在线观看国产60岁| 九九精品调教| 亚洲v日韩v欧美v综合| 成人夜色视频网站在线观看| 最近国语视频在线观看免费播放| 欧美精品久久久久久久久| 色中色综合网| 人妻少妇一区二区| 欧美成人福利视频| 亚洲国产天堂| 成人一区二区三|