新闻中心

现代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分组方法的详细内容,更多请关注其它相关文章!


# 性好  # 鸡西网页seo  # 亳州口碑营销推广公司  # 广西关键词排名招商  # 杨浦区网站建设企业信息  # 公司网站seo怎么优化  # 吉林seo软件方案公司  # 福州网站推广seo优化  # 湛江小企业网站建设  # 怎么优化商务网站  # 搜索营销推广报价  # 这是  # 是一个  # 如何实现  # javascript  # 多线程  # 如何使用  # 管理器  # 自定义  # 推荐使用  # 复用  # red  # 代码复用  # node  # node.js  # js  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 如何仅使用CSS更改登录界面背景图像图标的颜色  React Router v6 教程:构建认证保护的私有路由与重定向策略  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  PostgreSQL海量数据高效导入策略:Python与Django实践指南  今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程  C#中解析不规范的HTML为XML 常见的坑与解决办法  美团外卖商家服务中心入口 美团商家版官网入口  ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  CKEditor 5 自定义构建在React应用中渲染失败的调试与解决  PySpark中从现有列右侧提取可变长度字符创建新列的教程  在Socket.IO连接中实现Access Token自动更新与动态重连  Go语言中JSON数据解码与字段访问指南  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口  React Router 嵌套组件中 URL 重定向问题的解决方案  2026春节假期时间安排 2026春节假日查询  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  12306怎么选座位选到安静区_12306选座安静区域选择策略  J*aScript中赋值与自增运算符的复杂交互与执行机制  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法  微信网页版官方入口教程 微信网页版网页版快速登录步骤  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  将JSON对象数组转置为键值对列表的实用指南  Go Martini框架:动态服务解码后的图片内容  Typer应用中灵活处理命令行参数的令牌化与解析  C++如何实现异步操作_C++11使用std::future和std::async进行异步编程  Golang如何使用context实现超时取消_Golang context超时取消模式实践  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  J*aScript map 方法中处理循环元素为空数组的策略  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  J*aScript中安全有效地处理localStorage字符串数据  J*aScript类型检查_j*ascript代码规范  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  cad如何更改注释性对象的比例_cad注释性比例调整方法  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略  如何有效阻止外部脚本意外修改内联样式的高度属性  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  谷歌推RCS信息存档功能:公司可监控员工私密信息!  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口  b站如何看历史记录_b站观看历史找回方法  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  解决Flask中Quill编辑器内容提交失败及TypeError的指南 

搜索