如何在 JavaScript 中按分组查找最小值(calculatedFee)

17次阅读

如何在 JavaScript 中按分组查找最小值(calculatedFee)

本文介绍如何对数组对象按 `group` 字段分组,并高效获取每组中 `calculatedfee` 的最小值,提供简洁、可复用的原生 javascript 实现方案。

在实际开发中,我们常需对结构化数据进行分组聚合操作,例如从一组银行费用记录中提取每个分组(如 group: “1”、group: “2”)对应的最低手续费(calculatedFee)。javaScript 原生无需依赖外部库即可优雅实现该需求。

核心思路是:遍历数组,以 group 为键维护一个临时对象,每次比较当前项的 calculatedFee 与该组已记录的最小值(若未存在则设为 Infinity),仅当更小时更新。

以下是推荐的实现代码:

const data = [   { banknumber: 1, calculatedFee: 0,   feeNumber: 4, group: "1" },   { bankNumber: 1, calculatedFee: 147, feeNumber: 6, group: "1" },   { bankNumber: 1, calculatedFee: 20,  feeNumber: 10, group: "1" },   { bankNumber: 2, calculatedFee: 10,  feeNumber: 10, group: "3" },   { bankNumber: 2, calculatedFee: 100, feeNumber: 10, group: "3" },   { bankNumber: 3, calculatedFee: 100, feeNumber: 10, group: "2" } ];  const minFeesByGroup = {};  for (const item of data) {   const current = item.calculatedFee;   const existing = minFeesByGroup[item.group] ?? Infinity;    if (current < existing) {     minFeesByGroup[item.group] = current;   } }  console.log(minFeesByGroup); // 输出: { "1": 0, "3": 10, "2": 100 }

优势说明

立即学习Java免费学习笔记(深入)”;

  • 时间复杂度为 O(n),仅一次遍历;
  • 空间复杂度为 O(k),k 为唯一 group 数量;
  • 使用空值合并运算符 ?? 简洁处理未初始化分组,避免 undefined 比较陷阱;
  • 逻辑清晰,易于调试和扩展(如同时保留整条记录而非仅数值)。

⚠️ 注意事项

  • 若需返回完整对象(而不仅是 calculatedFee 值),可将 minFeesByGroup[group] 改为存储整个 item;
  • 确保 group 字段为字符串或可安全用作对象键的类型(数字会自动转字符串,但建议统一类型);
  • 如需支持 NULL/undefined 的 calculatedFee,应提前过滤或做类型校验(例如 typeof item.calculatedFee === 'number' && !isNaN(item.calculatedFee))。

该方法轻量、可靠,适用于浏览器环境及 node.js,是处理分组极值问题的经典实践。

text=ZqhQzanResources