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

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

開發 前端
我們可以看出 Object.groupBy? 主要用來處理 分組 相關的操作。預期對應的還有 Map.groupBy() 這個方法,他們的使用場景相差不大,這里就不去細說了。

Hello,大家好,我是 Sunday。

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

其中 Object.groupBy 是最受大家關注的新方法之一:

Object.groupBy() 靜態方法根據提供的回調函數返回的字符串值對給定可迭代對象中的元素進行分組。返回的對象具有每個組的單獨屬性,其中包含組中的元素的數組。

它的具體語法如下所示:

Object.groupBy(items, callbackFn)
// array:需要分組的數組。
// callback:對數組中的每個元素執行的回調函數?;卣{函數返回一個值,用作分組的鍵。

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

圖片圖片

那么接下來就讓我們通過 5 個場景,深入看一下 Object.groupBy 這個方法,對我們以后的開發會有什么幫助!

01:按單一條件分組

按照年齡為數據進行分組。

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:按多個條件分組

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:按復雜計算分組

根據指定的結果對數據進行分組處理。

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:依賴另外的數據進行分組

假設我們有一個用戶數據數組,并且想要按用戶居住的城市對其進行分組,其中城市數據是從外部 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:按日期分組

根據日期進行數據劃分。

const logs = [
  { message: '時間1', date: '2024-01-01T10:00:00Z' },
  { message: '時間2', date: '2024-01-01T12:00:00Z' },
  { message: '時間3', date: '2024-01-02T10:00:00Z' },
  { message: '時間4', date: '2024-01-02T14:00:00Z' },
  { message: '時間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": "時間1",
    "date": "2024-01-01T10:00:00Z"
  },
  {
    "message": "時間2",
    "date": "2024-01-01T12:00:00Z"
  }
],
"2024-01-02": [
  {
    "message": "時間3",
    "date": "2024-01-02T10:00:00Z"
  },
  {
    "message": "時間4",
    "date": "2024-01-02T14:00:00Z"
  }
],
"2024-01-03": [
  {
    "message": "時間5",
    "date": "2024-01-03T10:00:00Z"
  }
]
}
*/

總結

結合以上的 5 個場景,我們可以看出 Object.groupBy 主要用來處理 分組 相關的操作。預期對應的還有 Map.groupBy() 這個方法,他們的使用場景相差不大,這里就不去細說了。

所以,有了 Object.groupBy 之后,一旦遇到 分組 相關的場景,那就是用它吧~

責任編輯:武曉燕 來源: 程序員Sunday
相關推薦

2024-03-04 06:37:55

TypeScript類型聲明靜態方法

2023-05-25 11:13:03

CIOIT價值

2023-11-23 11:37:13

JavaScript數組

2023-09-21 10:09:10

JavaScript數組分組

2024-01-24 12:09:33

代碼Lodash前端

2012-08-09 10:12:30

windows 7資源管理器

2010-05-13 09:56:58

統一通信領域

2020-03-08 21:46:36

軟件evOps技術

2013-07-22 10:28:00

大數據谷歌亞馬遜

2022-07-07 11:25:50

JavaScriptLicenseMozilla

2014-05-05 09:58:01

2015-05-28 10:32:00

iOS 9蘋果WWDC

2024-03-08 15:38:40

2019-04-16 14:12:29

AI機器學習TensorFlow

2009-07-03 16:48:05

Windows CE

2023-11-03 07:21:40

Javascript數組分組

2017-09-22 14:04:33

前端Node.js新特性

2021-12-29 18:18:59

開源MedusaShopify

2016-03-14 09:12:43

架構本質發展

2010-12-01 12:48:43

TechEd 2010
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品免费视频 | av黄色在线播放 | 免费在线国产视频 | 久久久久亚洲精品中文字幕 | 日韩和的一区二在线 | 九九热热九九 | 久久久久久九九九九 | 在线亚州| h视频免费在线观看 | 黄色片视频免费 | 影视先锋av资源噜噜 | 国产日韩91 | 可以免费看的毛片 | 久热9 | 久久久久国产精品一区 | 日本高清不卡视频 | 黄色免费网站在线看 | 看av网 | 99国产欧美 | 成年人在线观看 | 成人国产精品一级毛片视频毛片 | av电影手机版 | 欧美精品在线观看 | 午夜精品久久久 | 伊人伊人网 | 久久久久久久一区二区三区 | 久久99蜜桃综合影院免费观看 | 久久久久久成人 | 精品不卡 | 中文字幕一区二区在线观看 | 日韩精品成人一区二区三区视频 | 狠狠操狠狠色 | 久久久久国产精品 | 91在线精品秘密一区二区 | 99热首页 | 国产精品久久久久久久久久免费 | 日本精品久久 | 观看毛片 | 人人澡人人爱 | 老司机午夜性大片 | 在线国产视频 |