You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按分组获取calculatedFee的最小值?

按Group分组获取最小calculatedFee的JavaScript实现

首先看你的原始数据:

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" },
];

下面提供两种简洁的实现方式:

方法一:使用Array.prototype.reduce()

这是处理分组聚合需求的高效方式,一次遍历就能完成分组和最小值计算:

function getMinFeeByGroup(data) {
  return data.reduce((acc, current) => {
    const group = current.group;
    // 若当前分组未记录,或当前费用更小则更新
    if (!acc[group] || current.calculatedFee < acc[group]) {
      acc[group] = current.calculatedFee;
    }
    return acc;
  }, {});
}

// 调用并查看结果
const result = getMinFeeByGroup(data);
console.log(result); // 输出:{ '1': 0, '3': 10, '2': 100 }

逻辑说明:

  • 初始化空对象acc作为累加器,用于存储每个分组的最小费用
  • 遍历数组中的每个对象,取出其group值
  • 对比累加器中该分组的现有值:如果没有记录,直接存入当前费用;如果已有记录,保留更小的那个值
  • 遍历结束后,累加器即为最终结果

方法二:使用Map结构

如果更习惯用Map来管理分组,可以用这种方式:

function getMinFeeByGroup(data) {
  const groupMap = new Map();
  for (const item of data) {
    const group = item.group;
    if (!groupMap.has(group) || item.calculatedFee < groupMap.get(group)) {
      groupMap.set(group, item.calculatedFee);
    }
  }
  // 按需转换为普通对象
  return Object.fromEntries(groupMap);
}

逻辑说明:

  • 用Map存储分组与最小费用的映射
  • 遍历数组时更新Map中的分组值,逻辑和reduce方式一致
  • 最后通过Object.fromEntries()将Map转换为普通对象,得到和第一种方法相同的结果

内容的提问来源于stack exchange,提问作者Elder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:16:10