
本文介绍如何对数组对象按 `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))。










