JavaScript 中按组查找最小值的高效实现方法

14次阅读

JavaScript 中按组查找最小值的高效实现方法

本文介绍如何在 javascript 中对对象数组按指定字段(如 group)分组,并为每组快速提取 calculatedfee 的最小值,提供原生循环reduce 两种实用方案。

在实际开发中,常需从结构化数据中按分类维度聚合统计信息,例如“每组中费用最低的记录”。给定一个包含 group 和 calculatedFee 字段的对象数组,目标是:为每个唯一 group 值,找出其对应对象中 calculatedFee 的最小值

最直观且性能优良的方式是使用单次遍历 + 哈希表(Plain Objectmap)缓存各组当前最小值:

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 }

该方法时间复杂度为 O(n),空间复杂度为 O(k)(k 为不同 group 数量),无额外依赖,兼容所有现代浏览器node.js 环境。

若偏好函数式风格,也可用 Array.prototype.reduce 实现等效逻辑:

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

const minFeesByGroup = data.reduce((acc, item) => {   const { group, calculatedFee } = item;   acc[group] = Math.min(acc[group] ?? Infinity, calculatedFee);   return acc; }, {});

⚠️ 注意事项:

  • 若需返回完整对象(而非仅最小值),应缓存整个对象(如 acc[group] = current
  • group 值为 undefined 或空字符串时可能引发意外覆盖,建议提前校验;
  • 如 group 类型多样(含数字、NULL、对象),推荐使用 Map 替代普通对象以避免原型污染或类型隐式转换问题。

总结:单次循环 + 条件更新是最清晰、高效且易维护的解法;掌握此模式,可轻松扩展至求最大值、平均值、计数等其他分组聚合场景。

text=ZqhQzanResources