
本文介绍如何对数组对象按 `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 <p>✅ <strong>优势说明</strong>: </p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill13063" title="Java Development Man"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20e695c2374.jpg" alt="Java Development Man" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill13063" title="Java Development Man" class="overflowclass">Java Development Man</a>
<p class="overflowclass">Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。</p>
</div>
<a rel="nofollow" href="/xiazai/skill13063" title="Java Development Man" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
- 时间复杂度为 O(n),仅一次遍历;
- 空间复杂度为 O(k),k 为唯一 group 数量;
- 使用空值合并运算符 ?? 简洁处理未初始化分组,避免 undefined 比较陷阱;
- 逻辑清晰,易于调试和扩展(如同时保留整条记录而非仅数值)。
⚠️ 注意事项:
- 若需返回完整对象(而不仅是 calculatedFee 值),可将 minFeesByGroup[group] 改为存储整个 item;
- 确保 group 字段为字符串或可安全用作对象键的类型(数字会自动转字符串,但建议统一类型);
- 如需支持 null/undefined 的 calculatedFee,应提前过滤或做类型校验(例如 typeof item.calculatedFee === 'number' && !isNaN(item.calculatedFee))。
该方法轻量、可靠,适用于浏览器环境及 Node.js,是处理分组极值问题的经典实践。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南









