成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

厲害了,JavaScript 新提案:Aray.groupBy()

開發 后端
許多開發人員喜歡 Ruby 編程語言,因為它具有豐富的標準實用程序庫。例如,Ruby中的數組有大量的方法。

許多開發人員喜歡 Ruby 編程語言,因為它具有豐富的標準實用程序庫。例如,Ruby中的數組有大量的方法。

不過,我們的JavaScript也在努力,在字符串和數組方面逐步豐富了它的標準庫。例如,在以前的文章中,介紹新的 array.at() 方法。

今天我們在來看新的數組組提案(目前處于第三階段),它引入了新方法 array.groupby() 和array.groupbytomap() 。它們的 polyfills 文件可以在core-js 庫中找到。

接著,我們來看下能從中學到些什么。

1. array.groupBy()

假設我們有一個產品列表,其中每個產品都是一個具有2個屬性的對象: name 和 category。

  1. const products = [ 
  2.   { name'apples', category: 'fruits' }, 
  3.   { name'oranges', category: 'fruits' }, 
  4.   { name'potatoes', category: 'vegetables' } 
  5. ]; 

在上面的示例中,products 是一個產品對象數組。

現在,對產品列表執行一個簡單的操作,將產品按類別分組。

  1. const groupByCategory = { 
  2.   'fruits': [ 
  3.     { name'apples', category: 'fruits' },  
  4.     { name'oranges', category: 'fruits' }, 
  5.   ], 
  6.   'vegetables': [ 
  7.     { name'potatoes', category: 'vegetables' } 
  8.   ] 
  9. }; 

如何從 products 數組中得到一個類似 groupByCategory 的數組?

通常的方法是使用array.reduce()來實現,如下所示:

  1. const groupByCategory = products.reduce((group, product) => { 
  2.   const { category } = product; 
  3.   group[category] = group[category] ?? []; 
  4.   group[category].push(product); 
  5.   return group
  6. }, {}); 
  7. console.log(groupByCategory); 
  8. // { 
  9. //   'fruits': [ 
  10. //     { name'apples', category: 'fruits' },  
  11. //     { name'oranges', category: 'fruits' }, 
  12. //   ], 
  13. //   'vegetables': [ 
  14. //     { name'potatoes', category: 'vegetables' } 
  15. //   ] 
  16. // } 

products.reduce((acc, product) => { ... }) 將產品數組還原為一個按類別分組的產品對象。

array.reduce()方法有用且強大,但有時它的可讀性并不是最好的。

因為分組數據是常見的事(從SQL中召回groupby ?),數組組提案引入了兩個有用的方法:array. groupBy()和 array.groupByToMap()。

下面介紹如何使用 array.groupBy() 創建相同的分類分組:

  1. const groupByCategory = products.groupBy(product => { 
  2.   return product.category; 
  3. }); 
  4.  
  5. console.log(groupByCategory);  
  6.  
  7. // { 
  8. //   'fruits': [ 
  9. //     { name'apples', category: 'fruits' },  
  10. //     { name'oranges', category: 'fruits' }, 
  11. //   ], 
  12. //   'vegetables': [ 
  13. //     { name'potatoes', category: 'vegetables' } 
  14. //   ] 
  15. // } 

products.groupBy(product => {...}) 返回一個對象,其中每個屬性的鍵是類別名稱,值是對應類別的產品數組。

使用 products.groupBy() 分組比使用 product.reduce() 代碼更少,更容易理解。

array.groupBy(callback) 接受一個回調函數,該函數被調用時有3個參數:當前數組項、索引和數組本身。回調函數應該返回一個字符串:你想添加項目的組名。

  1. const groupedObject = array.groupBy((item, index, array) => { 
  2.   // ... 
  3.   return groupNameAsString; 
  4. }); 

2. array.groupByToMap()

有時你可能想使用 Map 而不是普通對象。 Map 的好處是它可以接受任何數據類型作為鍵,但普通對象只限于字符串和 symbol。

恩,如果你想把數據分組到一個Map中,你可以使用 array.groupByToMap() 方法。

array.groupByToMap(callback)的工作方式與 array.groupBy(callback) 完全一樣,只是它將項目分組到 Map 中,而不是一個普通的 JS 對象中。

例如,將產品數組按類別名稱分組到一個 ap 中,執行方法如下。

  1. const groupByCategory = products.groupByToMap(product => { 
  2.   return product.category; 
  3. }); 
  4.  
  5. console.log(groupByCategory);  
  6.  
  7. // Map([ 
  8. //   ['fruits', [ 
  9. //     { name'apples', category: 'fruits' },  
  10. //     { name'oranges', category: 'fruits' }, 
  11. //   ]], 
  12. //   ['vegetables', [ 
  13. //     { name'potatoes', category: 'vegetables' } 
  14. //   ] 
  15. // ]) 

3.總結

如果你想輕松地對數組中的項進行分組(類似于SQL中的GROUP BY),那么歡迎使用新方法array.groupBy() 和 array.groupByToMap()。

兩個函數都接受一個回調函數,該回調函數應返回必須插入當前項的組的鍵。

array.groupBy()將這些項分組為一個普通的JavaScript對象,而array.groupByToMap()將它們分組為一個 Map 實例。

如果你想馬上使用這些函數,那么使用 core-js 庫提供的 polyfill。

作者:Ashish Lahoti 譯者:前端小智 來源:dmitripavlutin 原文:https://dmitripavlutin.com/javascript-array-group/

本文轉載自微信公眾號「大遷世界」,可以通過以下二維碼關注。轉載本文請聯系大遷世界公眾號。

 

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2021-12-27 07:59:50

ECMAScript JSON模塊Node.js

2021-09-17 12:18:53

NginxJavaScript前端

2018-04-11 14:30:33

2017-02-23 08:00:04

智能語音Click

2018-05-14 22:58:14

戴爾

2021-03-01 12:06:12

Nginx命令Linux

2023-05-06 06:47:46

Bing聊天機器人

2021-11-01 07:50:44

TomcatWeb應用

2020-06-08 17:35:27

Redis集群互聯網

2020-03-10 13:35:23

Gihub搜索開源

2022-04-08 08:11:28

Python代碼

2021-06-03 09:30:30

Python操作注冊表regedit

2022-01-25 08:36:29

array.flat映射函數數組

2019-11-25 21:53:48

代碼算法BUG

2017-07-27 16:51:19

數字化環衛信息化

2022-05-03 23:44:21

Python動態鏈接庫Ctypes

2020-06-09 07:42:30

重命名文件 Linux

2018-01-24 10:48:34

神經網絡深度學習前端

2017-02-20 10:17:53

華為

2021-05-15 08:02:33

HashMap 散列函數哈希沖突
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠色狠狠色综合日日92 | 国产午夜精品福利 | 视频一区中文字幕 | 黄色香蕉视频在线观看 | 国产美女特级嫩嫩嫩bbb片 | 欧美一级一 | 国产精品高 | 久久久久久国产精品免费免费狐狸 | 日韩免费福利视频 | 伊人久久综合影院 | 91麻豆精品国产91久久久更新资源速度超快 | 男人天堂免费在线 | 亚洲精品久久久久久一区二区 | 亚洲1区 | av在线视| 亚洲欧美视频 | 欧美日韩国产一区二区 | 日干夜干 | 6996成人影院网在线播放 | 中日韩毛片| jizz在线看片 | 欧美视频在线看 | 91资源在线观看 | 中文字幕av高清 | 国产精品久久久久久妇女6080 | 福利在线看 | h视频在线免费 | 亚洲激情第一页 | 国产高清精品一区 | 最新高清无码专区 | 81精品国产乱码久久久久久 | 在线视频一区二区 | 91五月婷蜜桃综合 | 国产欧美视频一区 | 黄色网址在线播放 | 国产精品亚洲成在人线 | 久久精品亚洲 | 日韩av电影在线观看 | 五月天综合影院 | 欧美13videosex性极品 | 中文字幕日韩一区 |