当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2024-07-24 14:44:56 351观看
导读Hello,大家好,我是 Sunday。ES 2024增加了很多 JS 的新特性, 在这篇文章中 我们也提到过几个可能会大火的新方法。其中 Object.groupBy 是最受大家关注的新方法之一:Object.groupBy() 静态方法根据提供的回调函数返回的字

Hello,大家好,我是 Sunday。DBp28资讯网——每日最新资讯28at.com

ES 2024增加了很多 JS 的新特性, 在这篇文章中 我们也提到过几个可能会大火的新方法。DBp28资讯网——每日最新资讯28at.com

其中 Object.groupBy 是最受大家关注的新方法之一:DBp28资讯网——每日最新资讯28at.com

Object.groupBy() 静态方法根据提供的回调函数返回的字符串值对给定可迭代对象中的元素进行分组。返回的对象具有每个组的单独属性,其中包含组中的元素的数组。DBp28资讯网——每日最新资讯28at.com

它的具体语法如下所示:DBp28资讯网——每日最新资讯28at.com

Object.groupBy(items, callbackFn)// array:需要分组的数组。// callback:对数组中的每个元素执行的回调函数。回调函数返回一个值,用作分组的键。

而这样方法在 Lodash 中也有过类似的实现,作用也与 Object.groupBy 类似(如果我们关注最近几年的 ES 新增特性,会发现很多的新增特性都在社区库中提前进行过实现):DBp28资讯网——每日最新资讯28at.com

图片图片DBp28资讯网——每日最新资讯28at.com

那么接下来就让我们通过 5 个场景,深入看一下 Object.groupBy 这个方法,对我们以后的开发会有什么帮助!DBp28资讯网——每日最新资讯28at.com

01:按单一条件分组

按照年龄为数据进行分组。DBp28资讯网——每日最新资讯28at.com

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:按复杂计算分组

根据指定的结果对数据进行分组处理。DBp28资讯网——每日最新资讯28at.com

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 获取的。DBp28资讯网——每日最新资讯28at.com

const users = [  { name: '张三', cityId: 1 },  { name: '李四', cityId: 2 },  { name: '王五', cityId: 1 },  { name: '赵六', cityId: 3 },  { name: '孙七', cityId: 2 }]// Simulate fetching city data from an external APIconst 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:按日期分组

根据日期进行数据划分。DBp28资讯网——每日最新资讯28at.com

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() 这个方法,他们的使用场景相差不大,这里就不去细说了。DBp28资讯网——每日最新资讯28at.com

所以,有了 Object.groupBy 之后,一旦遇到 分组 相关的场景,那就是用它吧~DBp28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-103164-0.htmlLodash 的又一方法被替代了,探索 JS 新特性 Object.groupBy

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 面试官:网页太慢了怎么排查?

下一篇: 聊一聊 CSS 的十个技巧和窍门

标签:
  • 热门焦点
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的&ldquo;网红&rdquo;。7月5日至9日,为期5天的东方甄选&ldquo;甘肃行&rdquo;首次在自有App内直播,
  • 苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    据 The Elec 报道,苹果已要求其供应商为未来的 iPhone 型号开发「无边框」OLED 显示面板。苹果显然已要求三星和 LG Display 开发新的 OLED 显示面
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主&ldquo;七王&rdquo;在群里介绍一些刷单赚
Top