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

Lodash 的又一方法被替代了,探索 JS 新特性 Object.groupBy

開發(fā) 前端
我們可以看出 Object.groupBy? 主要用來處理 分組 相關(guān)的操作。預(yù)期對(duì)應(yīng)的還有 Map.groupBy() 這個(gè)方法,他們的使用場(chǎng)景相差不大,這里就不去細(xì)說了。

Hello,大家好,我是 Sunday。

ES 2024增加了很多 JS 的新特性, 在這篇文章中 我們也提到過幾個(gè)可能會(huì)大火的新方法。

其中 Object.groupBy 是最受大家關(guān)注的新方法之一:

Object.groupBy() 靜態(tài)方法根據(jù)提供的回調(diào)函數(shù)返回的字符串值對(duì)給定可迭代對(duì)象中的元素進(jìn)行分組。返回的對(duì)象具有每個(gè)組的單獨(dú)屬性,其中包含組中的元素的數(shù)組。

它的具體語法如下所示:

Object.groupBy(items, callbackFn)
// array:需要分組的數(shù)組。
// callback:對(duì)數(shù)組中的每個(gè)元素執(zhí)行的回調(diào)函數(shù)。回調(diào)函數(shù)返回一個(gè)值,用作分組的鍵。

而這樣方法在 Lodash 中也有過類似的實(shí)現(xiàn),作用也與 Object.groupBy 類似(如果我們關(guān)注最近幾年的 ES 新增特性,會(huì)發(fā)現(xiàn)很多的新增特性都在社區(qū)庫中提前進(jìn)行過實(shí)現(xiàn)):

圖片圖片

那么接下來就讓我們通過 5 個(gè)場(chǎng)景,深入看一下 Object.groupBy 這個(gè)方法,對(duì)我們以后的開發(fā)會(huì)有什么幫助!

01:按單一條件分組

按照年齡為數(shù)據(jù)進(jìn)行分組。

const users = [
  { name: '張三', age: 21 },
  { name: '李四', age: 25 },
  { name: '王五', age: 21 },
  { name: '趙六', age: 28 }
 ]

 const groupedByAge = Object.groupBy(users, (user) => user.age)
 console.log(groupedByAge)
 /*
  {
    "21": [
        {
            "name": "張三", 
            "age": 21
        }, 
        {
            "name": "王五", 
            "age": 21
        }
    ], 
    "25": [
        {
            "name": "李四", 
            "age": 25
        }
    ], 
    "28": [
        {
            "name": "趙六", 
            "age": 28
        }
    ]
}
  */

02:按多個(gè)條件分組

const users = [
  { name: '張三', age: 21, gender: '男' },
  { name: '李四', age: 25, gender: '女' },
  { name: '王五', age: 21, gender: '女' },
  { name: '趙六', age: 25, gender: '女' },
  { name: '孫七', age: 30, gender: '女' },
  { name: '周八', age: 21, gender: '男' }
]

const groupedByAgeAndGender = Object.groupBy(users, (user) => {
  const ageGroup = user.age < 25 ? '25歲以下' : '25歲以上'
  return `${ageGroup}-${user.gender}`
})
console.log(groupedByAgeAndGender)
/*
{
"25歲以下-男": [
  {
    "name": "張三",
    "age": 21,
    "gender": "男"
  },
  {
    "name": "周八",
    "age": 21,
    "gender": "男"
  }
],
"25歲以上-女": [
  {
    "name": "李四",
    "age": 25,
    "gender": "女"
  },
  {
    "name": "趙六",
    "age": 25,
    "gender": "女"
  },
  {
    "name": "孫七",
    "age": 30,
    "gender": "女"
  }
],
"25歲以下-女": [
  {
    "name": "王五",
    "age": 21,
    "gender": "女"
  }
]
}
  */

03:按復(fù)雜計(jì)算分組

根據(jù)指定的結(jié)果對(duì)數(shù)據(jù)進(jìn)行分組處理。

const students = [
  { name: '張三', score: 85 },
  { name: '李四', score: 92 },
  { name: '王五', score: 70 },
  { name: '趙六', score: 78 },
  { name: '孫七', score: 88 }
]

const groupedByGrade = Object.groupBy(students, (student) => {
  if (student.score >= 90) return 'A'
  if (student.score >= 80) return 'B'
  if (student.score >= 70) return 'C'
  return 'D'
})
console.log(groupedByGrade)
/*
{
"B": [
  {
    "name": "張三",
    "score": 85
  },
  {
    "name": "孫七",
    "score": 88
  }
],
"A": [
  {
    "name": "李四",
    "score": 92
  }
],
"C": [
  {
    "name": "王五",
    "score": 70
  },
  {
    "name": "趙六",
    "score": 78
  }
]
}
  */

04:依賴另外的數(shù)據(jù)進(jìn)行分組

假設(shè)我們有一個(gè)用戶數(shù)據(jù)數(shù)組,并且想要按用戶居住的城市對(duì)其進(jìn)行分組,其中城市數(shù)據(jù)是從外部 API 獲取的。

const users = [
  { name: '張三', cityId: 1 },
  { name: '李四', cityId: 2 },
  { name: '王五', cityId: 1 },
  { name: '趙六', cityId: 3 },
  { name: '孫七', cityId: 2 }
]

// Simulate fetching city data from an external API
const cityData = {
  1: '北京',
  2: '上海',
  3: '深圳'
}
const groupedByCity = Object.groupBy(users, (user) => cityData[user.cityId])
console.log(groupedByCity)
/*
{
"北京": [
  {
    "name": "張三",
    "cityId": 1
  },
  {
    "name": "王五",
    "cityId": 1
  }
],
"上海": [
  {
    "name": "李四",
    "cityId": 2
  },
  {
    "name": "孫七",
    "cityId": 2
  }
],
"深圳": [
  {
    "name": "趙六",
    "cityId": 3
  }
]
}
*/

05:按日期分組

根據(jù)日期進(jìn)行數(shù)據(jù)劃分。

const logs = [
  { message: '時(shí)間1', date: '2024-01-01T10:00:00Z' },
  { message: '時(shí)間2', date: '2024-01-01T12:00:00Z' },
  { message: '時(shí)間3', date: '2024-01-02T10:00:00Z' },
  { message: '時(shí)間4', date: '2024-01-02T14:00:00Z' },
  { message: '時(shí)間5', date: '2024-01-03T10:00:00Z' }
]

const groupedByDate = Object.groupBy(
  logs,
  (log) => new Date(log.date).toISOString().split('T')[0]
)
console.log(groupedByDate)
/*
{
"2024-01-01": [
  {
    "message": "時(shí)間1",
    "date": "2024-01-01T10:00:00Z"
  },
  {
    "message": "時(shí)間2",
    "date": "2024-01-01T12:00:00Z"
  }
],
"2024-01-02": [
  {
    "message": "時(shí)間3",
    "date": "2024-01-02T10:00:00Z"
  },
  {
    "message": "時(shí)間4",
    "date": "2024-01-02T14:00:00Z"
  }
],
"2024-01-03": [
  {
    "message": "時(shí)間5",
    "date": "2024-01-03T10:00:00Z"
  }
]
}
*/

總結(jié)

結(jié)合以上的 5 個(gè)場(chǎng)景,我們可以看出 Object.groupBy 主要用來處理 分組 相關(guān)的操作。預(yù)期對(duì)應(yīng)的還有 Map.groupBy() 這個(gè)方法,他們的使用場(chǎng)景相差不大,這里就不去細(xì)說了。

所以,有了 Object.groupBy 之后,一旦遇到 分組 相關(guān)的場(chǎng)景,那就是用它吧~

責(zé)任編輯:武曉燕 來源: 程序員Sunday
相關(guān)推薦

2024-03-04 06:37:55

TypeScript類型聲明靜態(tài)方法

2023-05-25 11:13:03

CIOIT價(jià)值

2023-11-23 11:37:13

JavaScript數(shù)組

2023-09-21 10:09:10

JavaScript數(shù)組分組

2024-01-24 12:09:33

代碼Lodash前端

2010-05-13 09:56:58

統(tǒng)一通信領(lǐng)域

2020-03-08 21:46:36

軟件evOps技術(shù)

2012-08-09 10:12:30

windows 7資源管理器

2013-07-22 10:28:00

大數(shù)據(jù)谷歌亞馬遜

2022-07-07 11:25:50

JavaScriptLicenseMozilla

2014-05-05 09:58:01

2015-05-28 10:32:00

iOS 9蘋果WWDC

2019-04-16 14:12:29

AI機(jī)器學(xué)習(xí)TensorFlow

2024-03-08 15:38:40

2009-07-03 16:48:05

Windows CE

2023-11-03 07:21:40

Javascript數(shù)組分組

2018-08-10 09:00:47

全閃存陣列存儲(chǔ)

2020-04-21 09:45:32

新基建數(shù)據(jù)中心5G

2021-12-29 18:18:59

開源MedusaShopify

2017-09-22 14:04:33

前端Node.js新特性
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产在视频一区二区三区吞精 | 亚洲最新网址 | 亚洲高清免费视频 | 亚洲日韩中文字幕一区 | 欧美三区在线观看 | 成年人在线观看视频 | 亚洲欧美精品国产一级在线 | 日本不卡一区二区三区 | 免费在线观看一区二区三区 | 日韩一区在线视频 | 精品一区二区三区不卡 | 男人av的天堂 | 成人av在线播放 | 亚洲欧美网 | 影音先锋成人资源 | 亚洲欧美一区二区三区视频 | 国产午夜精品一区二区三区嫩草 | 蜜桃精品在线 | 久久久无码精品亚洲日韩按摩 | 国产一区久久精品 | 国产黄色大片网站 | 一区二区三区在线 | 欧 | 日韩精品在线网站 | 欧美日韩一区在线观看 | 久久999| 国产精品久久免费观看 | 国产网站在线播放 | 欧美日韩综合视频 | 成人国产精品免费观看视频 | 91资源在线 | 国产免费一区二区三区 | 国产精品揄拍一区二区 | 91视频精选 | 久久久久久国 | 亚洲成人国产精品 | av一区二区三区 | 国产二区视频 | 日本aaa视频 | 成人在线小视频 | 午夜视频一区二区三区 | 精品国产一区二区三区性色av |