新闻中心

使用 J*aScript 根据多个属性对数组对象进行分组

2025-11-16
浏览次数:
返回列表

使用 javascript 根据多个属性对数组对象进行分组

本文介绍如何使用 J*aScript 中的 reduce 方法,根据对象数组中多个属性的值对数组进行分组。通过修改现有的 groupByObjectKey 函数,使其能够接受一个属性键数组,并生成一个复合键来实现更细粒度的分组。

在处理数据时,经常需要根据对象的某些属性对数组进行分组。虽然根据单个属性分组相对简单,但有时需要根据多个属性进行分组以获得更精细的结果。本文将介绍如何修改现有的 J*aScript 函数,使其能够根据多个属性对对象数组进行分组。

现有代码分析

首先,我们回顾一下用于根据单个属性进行分组的原始函数:

const groupByObjectKey = (users, key) => {
  return users.reduce((rv, x) => {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
};

let users = [{
    "name": "john",
    "lastName": "doe",
    "gender": "male"
  },
  {
    "name": "jane",
    "lastName": "doe",
    "gender": "female"
  },
  {
    "name": "peter",
    "lastName": "dickons",
    "gender": "male"
  },
  {
    "name": "eva",
    "lastName": "dickons",
    "gender": "female"
  },
];

const usersGroupedByLastName = groupByObjectKey(
  users,
  "lastName"
);

console.log(usersGroupedByLastName);

此函数使用 reduce 方法遍历 users 数组,并根据指定的 key(例如,"lastName")将对象分组到累加器对象 rv 中。

修改函数以支持多个属性

为了支持根据多个属性进行分组,我们需要修改 groupByObjectKey 函数,使其接受一个属性键数组,而不是单个属性键。修改后的函数如下所示:

迷你天猫商城 迷你天猫商城

迷你天猫商城是一个基于Spring Boot的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为迷你天猫商城的核心组成部分之一,天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。所有页面均兼容IE10及以上现代浏览器。部署方式1、项目

迷你天猫商城 0 查看详情 迷你天猫商城
const groupByObjectKeys = (users, keys) => {
  return users.reduce((rv, x) => {
    const key = keys.map(k => x[k]).join('-');
    (rv[key] = rv[key] || []).push(x);
    return rv;
  }, {});
};

在这个修改后的函数中,keys 参数是一个字符串数组,表示用于分组的属性。map 方法用于提取每个属性的值,join('-') 方法将这些值连接成一个复合键,用连字符分隔。然后,使用此复合键将对象分组到累加器对象 rv 中。

使用示例

以下是如何使用修改后的函数根据 lastName 和 gender 对 users 数组进行分组:

let users = [{
    "name": "john",
    "lastName": "doe",
    "gender": "male"
  },
  {
    "name": "jane",
    "lastName": "doe",
    "gender": "female"
  },
  {
    "name": "peter",
    "lastName": "dickons",
    "gender": "male"
  },
  {
    "name": "eva",
    "lastName": "dickons",
    "gender": "female"
  },
];

const usersGroupedByLastNameAndGender = groupByObjectKeys(
  users,
  ["lastName", "gender"]
);

console.log(usersGroupedByLastNameAndGender);

这将生成一个对象,其中键是 lastName-gender 的组合,值是具有该组合的对象的数组。例如:

{
  "doe-male": [
    {
      "name": "john",
      "lastName": "doe",
      "gender": "male"
    }
  ],
  "doe-female": [
    {
      "name": "jane",
      "lastName": "doe",
      "gender": "female"
    }
  ],
  "dickons-male": [
    {
      "name": "peter",
      "lastName": "dickons",
      "gender": "male"
    }
  ],
  "dickons-female": [
    {
      "name": "eva",
      "lastName": "dickons",
      "gender": "female"
    }
  ]
}

注意事项

  • 键的分隔符: 在 join('-') 中使用的分隔符可以根据需要进行更改,但应选择一个在属性值中不太可能出现的字符,以避免键冲突。
  • 属性顺序: 属性在 keys 数组中的顺序会影响生成的复合键。确保顺序正确以获得所需的分组结果。
  • 性能: 对于大型数据集,此方法可能不是最有效的。可以考虑使用更高级的数据结构或算法来优化性能。

总结

通过修改现有的 groupByObjectKey 函数,使其能够接受一个属性键数组,我们可以轻松地根据多个属性对 J*aScript 中的对象数组进行分组。这提供了一种灵活且强大的方法来组织和分析数据。希望本文能够帮助你更好地理解和应用 J*aScript 中的数组分组技术。

以上就是使用 J*aScript 根据多个属性对数组对象进行分组的详细内容,更多请关注其它相关文章!


# java  # 字符串数组  # red  # 多个  # javascript  # 如何防止  # 广州网站推广优化建设  # 六库网站建设平台  # 它很  # 组中  # 有什么区别  # 如何使用  # 是一个  # 累加器  # 数据结构  # 使其  # 便宜的网站建设排名软件  # 时尚潮流网站建设  # 网站推广软文  # 平山商城网站推广  # 小红书关键词排名推荐  # 一奇网站建设  # seo信息流难吗  # 网络营销推广佳 好乐云seo 


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


相关推荐: 自定义Bag-of-Words实现:处理带负号的词汇权重  不同用户不同价格! 索尼开启账户个性化定价测试  《主播少女的秘密账号迷宫》首支宣传片  顺丰快递查单号物流信息 顺丰快递小程序查询入口  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  漫蛙漫画网页端入口 漫蛙2官方正版漫画站点  火锅吃太多会怎样 火锅吃太多会上火吗  Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】  msn官网入口地址手机版 msn官方网站手机最新链接  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  在Runstone环境中高效处理TasteDive API的JSON数据  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  蛙漫2台版漫画地址 Manwa2正版网页版链接  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  b站怎么删除评论_b站评论管理与删除操作  AO3中文官网链接_AO3网页版稳定镜像站  Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析  win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】  新三国志曹操传110级星符试炼夏侯渊极难攻略  J*aScript数组对象转换:按指定键分组与值收集  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题  vivo云服务网页版登录 怎么登录vivo云服务网页版  Discord Slash 命令响应超时问题的异步解决方案  我的世界官方游戏入口 我的世界官网平台直达链接  提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案  Composer如何解决json扩展缺失的错误  漫蛙网页登录入口 漫蛙漫画官方授权网址  Python实现多节点属性重叠度分析教程  深入理解Google Cloud Datastore查询:祖先路径与数据一致性  单射、满射与双射的关系 一文理清所有逻辑  必由学官网首页入口 必由学教师网页版登录指南  outlook中文官网入口地址 outlook官方中文版直达首页链接  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法  NetBeans Ant项目:自动化将资源文件复制到dist目录的教程  LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别  在Typer应用中优雅地处理和重组任意命令行参数  优化Log4j2控制台输出性能:解决异步日志瓶颈  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式  age动漫网站入口 age动漫官网直接访问入口  taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具  J*aScript:在map操作中高效处理空数组  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  利用5118提升短视频内容效果_5118短视频关键词优化方法  谷歌邮箱注册显示错误Gmail服务器异常与延迟处理  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】 

搜索