信息发布→ 登录 注册 退出

现代J*aScript_Array分组方法

发布时间:2025-11-22

点击量:
J*aScript中常用reduce结合对象或Map实现数组分组,如按性别或年龄区间分类,兼容性好且逻辑清晰,推荐使用;Map适用于复杂键类型,而Object.groupBy为实验性新特性,暂不建议生产环境使用。

现代javascript_array分组方法

J*aScript 中对数组进行分组是一个常见需求,比如按类别、年份或状态将数据归类。现代 J*aScript 提供了简洁高效的方法来实现数组分组,尤其是结合 Array.reduce()Map 或普通对象的方式最为常用。下面介绍几种实用且清晰的分组方法。

使用 reduce 进行基础分组

这是最经典也最灵活的方式。通过 reduce 遍历数组,并根据某个属性值累积生成分组对象。

例如,有一组用户数据,想按性别分组:

const users = [
  { name: 'Alice', gender: 'female' },
  { name: 'Bob',   gender: 'male' },
  { name: 'Charlie', gender: 'male' },
  { name: 'Diana', gender: 'female' }
];

const grouped = users.reduce((acc, item) => {
  const key = item.gender;
  if (!acc[key]) acc[key] = [];
  acc[key].push(item);
  return acc;
}, {});

// 结果:
// {
//   female: [ {name: 'Alice', ...}, {name: 'Diana', ...} ],
//   male: [ {name: 'Bob', ...}, {name: 'Charlie', ...} ]
// }

使用 Map 对象进行更复杂的分组

当你需要更灵活的键类型(如对象、函数)作为分组依据时,Map 比普通对象更合适。同时,Map 提供了更好的性能和内置方法。

示例:按年龄区间分组

const people = [
  { name: 'Tom', age: 25 },
  { name: 'Jerry', age: 34 },
  { name: 'Lucy', age: 19 },
  { name: 'John', age: 36 }
];

const groupByAgeRange = people.reduce((map, person) => {
  const range = person.age < 30 ? 'under-30' : '30-and-over';
  if (!map.has(range)) map.set(range, []);
  map.get(range).push(person);
  return map;
}, new Map());

// 转为对象(可选)
Object.fromEntries(groupByAgeRange);

封装可复用的分组函数

为了提高代码复用性,可以封装一个通用的 groupBy 函数,接受数组和分组条件函数作为参数。

mallcloud商城 mallcloud商城

mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提

mallcloud商城 0 查看详情 mallcloud商城

function groupBy(array, keyFn) {
  return array.reduce((acc, item) => {
    const key = keyFn(item);
    if (!acc[key]) acc[key] = [];
    acc[key].push(item);
    return acc;
  }, {});
}

// 使用方式
const groupedByGender = groupBy(users, user => user.gender);
const groupedByInitial = groupBy(users, user => user.name[0].toUpperCase());

利用 Object.groupBy(实验性,仅部分环境支持)

ECMAScript 正在提案引入原生的 Object.groupBy 方法,目前仅在较新版本的 Chrome 和 Node.js(需启用 flag)中可用。

语法示例:

// 注意:目前不建议生产环境使用
const grouped = Object.groupBy(users, user => user.gender);

该方法返回一个对象,结构与 reduce 方式一致,未来可能成为标准。

基本上就这些。日常开发中推荐使用 reduce 方式,兼容性好、逻辑清晰。如果项目环境较新,也可关注 Object.groupBy 的进展。关键是理解“累积 + 分类”的思维模式,就能应对各种分组场景。

以上就是现代J*aScript_Array分组方法的详细内容,更多请关注其它相关文章!


相关文章: Win11怎么开启高性能模式_Windows 11电源计划优化设置  利用Bokeh CustomJS动态控制DataTable列可见性  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  小米14应用无法联网原因分析_小米14网络权限修复  PHP:根据嵌套关联数组项值动态添加新键值对  在J*a中如何使用ForkJoinPool进行分治任务并行处理_ForkJoinPool分治并行技巧说明  圆通快递查询实时追踪 圆通物流包裹状态快速查看  网易大神账号申诉需要多久_网易大神账号申诉流程说明  深入理解Go语言中的指针类型:以*string为例  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  Pyrogram与g4f集成:异步编程实践与常见错误解决  Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组  网站内容防复制粘贴的实现策略与局限性  海棠账号登录入口_登录海棠账户同步阅读记录  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  composer的"require-dev"部分是用来做什么的?  WooCommerce后台产品编辑页:获取分类ID并实现角色权限控制  Golang如何安装Swagger工具_GoSwagger文档生成环境  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项  c++项目目录结构应该如何组织_c++工程化项目结构规范  React Hooks最佳实践:动态组件状态管理的组件化方案  Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧  steam官方入口大全 steam账号注册及操作指南  AO3最新镜像入口 Archive of Our Own官方平台访问  厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新  Excel文件在线转换快速入口 Excel在线格式转换网站  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  动漫岛观看全网网 动漫岛在线正版动漫入口  Animex动漫社网入口地址 Animex动漫社网正版在线入口  163邮箱登录密码 163邮箱忘记密码找回  css链接悬停下划线样式如何自定义_使用::after结合content和transition  可靠CSGO开箱平台解析 CSGO开箱网合集  使用PHP DOM解析器高效提取HTML中特定标题及其紧邻段落  J*aScript中赋值与自增运算符的复杂交互与执行机制  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  C++如何解决segmentation fault_C++段错误调试与原因分析  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  mc.js官网登录入口 mc.js官方登录入口最新版  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  JUnit5/Mockito:优雅测试内部依赖与异常处理的实践  Tailwind CSS line-clamp 布局问题解析与修复指南  excel怎么制作工资条 excel快速生成工资条的方法  荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】  《铁拳8》黑皮辣妹新实机:元气满满的18岁少女! 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!