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

如何在JavaScript中按bankNumber和group筛选最小calculatedFee

按bankNumber和group组合筛选calculatedFee的最小值

我们可以通过遍历数组,以bankNumber-group作为唯一键来分组记录每个组合的最小calculatedFee。下面提供两种实用实现方式:

方式一:返回包含最小费用值的结构化数组

这种方式返回一个简洁的数组,每个元素仅保留bankNumber、group和对应的最小calculatedFee:

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": 1, "calculatedFee": 200, "feeNumber": 10, "group": "2"},
  { "bankNumber": 1, "calculatedFee": 20, "feeNumber": 10, "group": "2" },
  { "bankNumber": 2, "calculatedFee": 10, "feeNumber": 10, "group": "3" },
  { "bankNumber": 2, "calculatedFee": 100, "feeNumber": 10, "group": "3" },
  { "bankNumber": 3, "calculatedFee": 100, "feeNumber": 10, "group": "2" },
];

function getMinFeesByBankGroup(data) {
  const minFeeMap = {};
  
  data.forEach(item => {
    const key = `${item.bankNumber}-${item.group}`;
    // 若键不存在或当前费用更小,则更新记录
    if (!minFeeMap.hasOwnProperty(key) || item.calculatedFee < minFeeMap[key]) {
      minFeeMap[key] = item.calculatedFee;
    }
  });
  
  // 将映射转换为结构化数组
  return Object.entries(minFeeMap).map(([key, minFee]) => {
    const [bankNumber, group] = key.split('-');
    return {
      bankNumber: parseInt(bankNumber),
      group,
      minCalculatedFee: minFee
    };
  });
}

// 使用示例
const result1 = getMinFeesByBankGroup(data);
console.log(result1);

输出结果:

[
  { bankNumber: 1, group: '1', minCalculatedFee: 0 },
  { bankNumber: 1, group: '2', minCalculatedFee: 20 },
  { bankNumber: 2, group: '3', minCalculatedFee: 10 },
  { bankNumber: 3, group: '2', minCalculatedFee: 100 }
]

方式二:返回包含最小费用的完整对象

如果需要保留原对象的所有属性(如feeNumber),可以直接返回每个组合中费用最小的完整对象:

function getMinFeeObjectsByBankGroup(data) {
  const minFeeObjectMap = {};
  
  data.forEach(item => {
    const key = `${item.bankNumber}-${item.group}`;
    // 若键不存在或当前费用更小,则替换为当前对象
    if (!minFeeObjectMap.hasOwnProperty(key) || item.calculatedFee < minFeeObjectMap[key].calculatedFee) {
      minFeeObjectMap[key] = { ...item }; // 浅拷贝避免引用修改原数据
    }
  });
  
  // 提取映射中的值作为结果数组
  return Object.values(minFeeObjectMap);
}

// 使用示例
const result2 = getMinFeeObjectsByBankGroup(data);
console.log(result2);

输出结果:

[
  { bankNumber: 1, calculatedFee: 0, feeNumber: 4, group: '1' },
  { bankNumber: 1, calculatedFee: 20, feeNumber: 10, group: '2' },
  { bankNumber: 2, calculatedFee: 10, feeNumber: 10, group: '3' },
  { bankNumber: 3, calculatedFee: 100, feeNumber: 10, group: '2' }
]

核心逻辑说明:

  • 用bankNumber和group拼接唯一键,确保每个组合仅被记录一次
  • 遍历数组时,实时对比并更新每个组合的最小费用记录
  • 最后将映射转换为数组格式,便于后续业务使用

内容的提问来源于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:33:17