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

JavaScript收银机代码优化:合并相同币种的找零数组

合并收银机找零数组中相同币种的总额

你当前的收银机代码返回的找零是拆分后的单一面额数组(例如多个['TWENTY', 20]),需要合并为相同币种金额求和后的格式,最终返回结构如下:

{ status: 'OPEN', change: [['TWENTY', 60],['TEN', 20],...] }

可以通过对象中转累加+转二维数组的方式实现,直接上实操代码:

基础合并方案(不保证顺序)

假设你当前生成的零散找零数组为rawChange,处理逻辑如下:

// 1. 用对象累加相同币种的金额
const changeMap = {};
rawChange.forEach(([currency, amount]) => {
  changeMap[currency] = (changeMap[currency] || 0) + amount;
});

// 2. 将对象转换为要求的二维数组格式
const mergedChange = Object.entries(changeMap);

// 3. 组装最终返回结果
const result = {
  status: 'OPEN',
  change: mergedChange
};

带币种顺序的合并方案(推荐)

如果需要保持找零币种从大到小的顺序(符合收银逻辑),可以提前定义币种优先级数组,再生成有序的合并数组:

// 定义收银机支持的币种优先级(从大到小,根据实际币种调整)
const currencyPriority = ['ONE HUNDRED', 'TWENTY', 'TEN', 'FIVE', 'ONE', 'QUARTER', 'DIME', 'NICKEL', 'PENNY'];

// 1. 累加金额
const changeMap = {};
rawChange.forEach(([currency, amount]) => {
  changeMap[currency] = (changeMap[currency] || 0) + amount;
});

// 2. 按优先级生成有序的合并数组
const mergedChange = currencyPriority
  .filter(currency => changeMap.hasOwnProperty(currency))
  .map(currency => [currency, changeMap[currency]]);

// 3. 组装结果
const result = {
  status: 'OPEN',
  change: mergedChange
};

逻辑说明

  • 先用对象changeMap作为中间容器,以币种名称为键,遍历零散数组时逐个累加对应金额;
  • Object.entries()可以直接把键值对转换为[币种, 总额]的二维数组;
  • 若需要顺序,通过预定义的优先级数组过滤和映射,确保找零数组的币种顺序符合收银习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:35:33