#LearnedToday:ObjectgroupBy()

#learnedtoday:objectgroupby()

?终于出来了!不再需要编写丑陋的代码来按字段的特定值对对象数组进行分组!

自 2023 年底以来,对象有一个名为 groupby() 的官方静态方法,可以为我们做到这一点!
它接受一个 iterable(例如数组)和一个函数,该函数针对每个元素执行,并且必须返回该特定元素的“类别”。
该方法返回一个新对象,其中每个键都是一个不同的类别,其中包含属于该特定类别的对象数组。

注意:返回的对象和原始可迭代对象中的元素是相同的(不是深拷贝!)。更改元素的内部结构将反映在原始可迭代对象和返回的对象中。

例子

让我们举一个实际的例子来看看按年龄对所有忍者神龟角色进行分组是多么容易

初始数组

const ninjaturtlescharacters = [  { age: 16, name: 'michelangelo' },  { age: 16, name: 'raffaello' },  { age: 16, name: 'donatello' },  { age: 16, name: 'leonardo' },  { age: 91, name: 'splinter' },  { age: 25, name: 'casey jones' },  { age: 25, name: 'april o'neil' }];

好的老方法(使用reduce)

const ninjaturtlescharactersbyage = ninjaturtlescharacters.reduce(  (groupedpeople, item) => ({    ...groupedpeople,    [item.age]: groupedpeople[item.age]      ? [...groupedpeople[item.age], item]      : [item],  }),  {});

现代方式

const ninjaturtlescharactersbyagenew = object.groupby(  ninjaturtlescharacters,  ({ age }) => age);

提示:如果您想返回 map 而不是 object,请使用 map.groupby()

结果

{  "16": [    { age: 16, name: 'Michelangelo' },    { age: 16, name: 'Raffaello' },    { age: 16, name: 'Donatello' },    { age: 16, name: 'Leonardo' }  ],  "25": [    { age: 25, name: 'Casey Jones' },    { age: 25, name: 'April O'Neil' }  ],  "91": [    { age: 91, name: 'Splinter' }  ]}

演示

??‍? 像往常一样,我创建了一个简单的 stackblitz 项目来使用代码。

PhotoG PhotoG

PhotoG是全球首个内容营销端对端智能体

PhotoG 112 查看详情 PhotoG

? 文档:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/object/groupby

ℹ 浏览器支持:https://caniuse.com/mdn-javascript_builtins_object_groupby

以上就是#LearnedToday:ObjectgroupBy()的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/457804.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 02:10:19
下一篇 2025年11月8日 02:15:14

相关推荐

  • JavaScript生成器与迭代器协议实现

    生成器和迭代器基于统一协议实现惰性求值与数据遍历,通过next()方法返回{value, done}对象,生成器函数简化了迭代器创建过程,提升处理大数据序列的效率与代码可读性。 JavaScript中的生成器(Generator)和迭代器(Iterator)是处理数据序列的重要机制,尤其在处理惰性求…

    2025年12月6日 web前端
    000
  • 8个超好用的Python内置函数,提升效率必备!

    python中有许多内置函数,不像print那么广为人知,但它们却异常的强大,用好了可以大大提高代码效率。 这次来梳理下8个好用的python内置函数。 1、set() 当需要对一个列表进行去重操作的时候,set()函数就派上用场了。 代码语言:javascript代码运行次数:0运行复制 obj …

    2025年12月3日
    100
  • JavaScript如何用Array.of创建数组

    array.of() 比 new array() 更适合创建新数组,因为它始终将所有参数视为数组元素,避免了构造函数在单个数字参数时创建空数组的歧义。1. array.of() 无论传入多少参数,都会直接创建包含这些元素的数组;2. 而 new array() 在仅一个数字参数时会创建相应长度的空数…

    2025年12月2日 web前端
    000
  • ES6中如何用数组的fill方法填充元素

    fill()方法常见应用场景有四:1.创建并初始化固定长度数组;2.重置数组特定部分;3.算法中使用全值数组作为初始状态;4.填充占位符或默认值数组。例如new array(10).fill(0)快速生成十个零,gameboard.fill(null, 2, 5)清空棋盘部分区域,visitedno…

    2025年12月2日 web前端
    000
  • ES6中如何用Array.from转换类数组

    array.from() 是 es6 中用于将类数组对象或可迭代对象转换为新数组的方法。其语法为 array.from(arraylike, mapfn, thisarg),其中 arraylike 是必填参数,表示要转换的对象;mapfn 和 thisarg 为可选参数,分别用于元素映射和指定 t…

    2025年12月2日 web前端
    000
  • Python any()函数用法解析

    %ign%ignore_a_1%re_a_1%的any()函数用来检测可迭代对象中是否有任意元素为true。 1、 创建可遍历的对象 2、 使用any函数进行判断 黑色全屏自适应的H5模板 黑色全屏自适应的H5模板HTML5的设计目的是为了在移动设备上支持多媒体。新的语法特征被引进以支持这一点,如v…

    2025年12月2日 软件教程
    000
  • Python any函数用法解析

    %ign%ignore_a_1%re_a_1%的any()函数用于检测可迭代对象中是否存在至少一个为真的元素,若存在则返回true,否则返回false。 1、 创建一个可遍历的对象。 2、 通过any()函数检测可迭代对象中是否存在至少一个为真的元素。 立即学习“Python免费学习笔记(深入)”;…

    2025年12月2日 软件教程
    000
  • 更基本的语法 – 循环和异常

    本周是毫无成效的一周之一。我在训练营内容上没有取得太大进展,但我设法涵盖了本模块的最后一个理论单元: java 和大多数源自 c 的高级语言一样,具有三种基本类型的重复循环(著名的循环):for、while 和 do-while。 for 当我们预先知道将用作可迭代对象(如数组)的元素的大小时使用。…

    2025年12月2日 java
    000
  • Go语言中的类型泛化与泛型模拟:接口的运用与演进

    Go语言在早期版本中,不直接支持Haskell等语言中的类型变量或泛型。为了实现类型无关的功能,Go语言主要依赖空接口`interface{}`。通过将参数和返回值声明为`interface{}`,函数可以处理任何类型的数据,但需要进行类型断言来恢复具体类型。Go 1.18版本后引入了真正的泛型,为…

    2025年12月1日 后端开发
    000
  • Java中动态列表按行分组格式化输出教程

    本教程详细讲解如何在java中将一个不定数量的字符串列表(如游戏物品清单)按指定数量(例如每行三个)进行分组,并以逗号分隔的形式输出到控制台。文章将介绍如何利用string.join()结合list.sublist()方法,优雅地处理列表末尾不足一组的情况,避免使用固定格式化字符串可能导致的运行时错…

    2025年12月1日 java
    000
  • JavaScript如何用Promise.allSettled处理结果

    promise.allsettled用于等待所有promise完成(无论成功或失败),并返回结果数组。它会收集每个promise的status、value(fulfilled时)或reason(rejected时)。1. 它不会因某个promise被拒绝而中断整体流程;2. 返回的结果数组中每个对象…

    2025年12月1日 web前端
    000
  • JavaScript中生成器与异步编程

    生成器在异步控制流中的核心作用是作为“流程协调员”,提供非阻塞式的暂停与恢复机制。①通过function*和yield关键字,允许函数中途暂停并将值“吐”出,外部通过next()方法传回值并继续执行;②支持以同步方式编写异步代码,提升可读性和维护性;③提供统一的错误处理机制,通过generator.…

    2025年11月30日 web前端
    100
  • Laravel Blade:如何优雅地处理循环中的空数据情况

    本文详细介绍了在Laravel Blade模板中,如何优雅地处理从数据库查询返回的空数据集。通过深入分析传统@foreach循环在处理空数据时的局限性,并引入Laravel提供的@forelse指令,展示了如何简洁高效地在数据为空时显示特定消息,从而提升用户体验和代码可读性。 在Web开发中,我们经…

    2025年11月30日
    000
  • Promise的静态方法全面解析

    promise的静态方法包括all、race、allsettled、any、resolve和reject,它们用于处理多个promise的并发、竞争、状态聚合等场景。promise.all()适用于所有任务必须成功完成的情况,任一失败则整体失败;promise.race()返回第一个完成(无论成功或…

    2025年11月29日 web前端
    000
  • ES6的迭代器协议如何自定义遍历

    要实现自定义遍历,需实现symbol.iterator方法和next()方法。1. 对象必须实现symbol.iterator方法,返回一个迭代器对象;2. 迭代器对象必须有next()方法,返回包含value和done属性的对象。例如创建可迭代的数组包装器时,this.index初始化为0,每次调…

    2025年11月29日 web前端
    000
  • Python “int”对象不可迭代错误:列表迭代的正确方法与去重求和实现

    本文旨在帮助开发者理解并解决Python中常见的“TypeError: ‘int’ object is not iterable”错误,尤其是在尝试迭代整数类型变量时。通过分析错误原因,并结合去重求和的实际案例,提供清晰的解决方案和最佳实践,助你写出更健壮的Python代码。…

    2025年11月29日 后端开发
    000
  • Python asyncio并发任务的超时控制与优雅关闭

    本文探讨了在Python asyncio中如何有效管理可能长时间阻塞的并发任务,并实现整体操作的超时控制。针对asyncio.gather在特定场景下的局限性,重点介绍了asyncio.wait方法,它允许设定超时时间,并能区分已完成和未完成的任务,从而实现对未完成任务的优雅取消,确保程序按预期及时…

    2025年11月29日 后端开发
    000
  • 如何用Python源码模拟内置函数行为 仿写核心功能理解源码逻辑

    模拟len()核心是检查对象是否有__len__方法并调用,否则尝试迭代计数并处理异常;2. 模拟range()需支持start/stop/step参数逻辑并用yield实现惰性生成;3. 深入理解python数据模型即对象通过__len__、__iter__等协议与内置函数交互;4. 纯pytho…

    2025年11月29日 后端开发
    000
  • Pandas多条件列生成:列表推导式与apply方法详解

    本文旨在探讨如何在Pandas DataFrame中基于多列条件创建新列。文章首先纠正了列表推导式中迭代多个Series的常见语法错误,指出应使用zip函数进行正确迭代。随后,针对复杂的多条件逻辑,详细介绍了如何结合df.apply()方法与自定义函数,实现更清晰、更易维护的代码结构。通过对比两种方…

    2025年11月29日 后端开发
    000
  • python中sorted()函数和列表的sort()方法有什么不同?

    sorted()返回新列表不改变原对象,sort()直接修改原列表。前者适用于需保留原数据且支持所有可迭代对象,后者仅用于列表但节省内存且通常更快,选择取决于是否需保留原列表及性能需求。 sorted() 返回一个新的排序后的列表,而 sort() 方法直接修改原列表。这就是最核心的区别。 sort…

    2025年11月29日 后端开发
    000

发表回复

登录后才能评论
关注微信