成人免费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技術棧公眾號

主站蜘蛛池模板: 欧洲成人 | 久久久精品综合 | 久久久久99 | 日韩一区二区三区视频在线观看 | 国产玖玖| 久久69精品久久久久久国产越南 | 欧美一二三区 | 欧美日日 | 国产精品高清一区二区三区 | cao视频| h视频在线免费 | 亚洲精品粉嫩美女一区 | 久久综合久久自在自线精品自 | 亚洲色图综合网 | 日韩欧美视频网站 | 少妇精品久久久久久久久久 | 日韩在线不卡 | 日韩中文字幕在线观看 | 天堂资源 | 成人黄色网址大全 | 一区二区福利视频 | 欧美精品一区二区在线观看 | 一级a爱片性色毛片免费 | 91久久久久久久 | 亚洲一区在线日韩在线深爱 | 亚洲欧美视频一区 | 精品综合视频 | 成人亚洲视频 | 日本午夜在线视频 | 国产精品成人一区二区三区 | 日韩综合 | 欧美精品一区二区三区四区五区 | 91欧美激情一区二区三区成人 | 中文字幕在线第二页 | 亚洲一区视频 | 精品一区二区免费视频 | 欧美一级小视频 | 伊人手机在线视频 | 国产福利资源在线 | 天天综合永久 | 国产成人精品一区二区三区在线 |