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

如何拆分数组元素为姓名与金额字段,求和后判定获胜者

按姓名汇总金额并找出获胜者的实现方案

先明确下你的需求场景:

现有数组:let receipts_array =["Anna 0.4","Peter 0.25","Anna 0.5","Peter 0.5","Peter 0.33"];
需要把每个元素拆分成姓名和金额,按姓名求和后找出总金额更高的获胜者,预期结果是Peter。

我给你两种JavaScript实现思路,你可以根据自己的习惯选择:

方案一:基础遍历+对象累加

这种方式逻辑直白,适合刚接触数组处理的开发者理解:

let receipts_array = ["Anna 0.4", "Peter 0.25", "Anna 0.5", "Peter 0.5", "Peter 0.33"];

// 初始化空对象,用来存储每个人的总金额
const totalAmounts = {};

// 遍历数组处理每一条记录
receipts_array.forEach(item => {
  // 按空格拆分姓名和金额字符串
  const [name, amountStr] = item.split(' ');
  // 把金额转成浮点数,避免字符串拼接错误
  const amount = parseFloat(amountStr);
  
  // 累加金额:如果姓名已存在则追加,否则初始化金额
  if (totalAmounts[name]) {
    totalAmounts[name] += amount;
  } else {
    totalAmounts[name] = amount;
  }
});

// 找出总金额最高的获胜者
let winner = '';
let highestTotal = 0;

for (const name in totalAmounts) {
  if (totalAmounts[name] > highestTotal) {
    highestTotal = totalAmounts[name];
    winner = name;
  }
}

console.log(winner); // 输出结果:Peter

方案二:用reduce简化累加逻辑

如果你熟悉数组高阶函数,用reduce可以把累加步骤写得更紧凑:

let receipts_array = ["Anna 0.4", "Peter 0.25", "Anna 0.5", "Peter 0.5", "Peter 0.33"];

// 用reduce一步完成金额累加
const totalAmounts = receipts_array.reduce((acc, item) => {
  const [name, amountStr] = item.split(' ');
  const amount = parseFloat(amountStr);
  // 用(acc[name] || 0)处理首次出现的姓名,不存在则取0再加当前金额
  acc[name] = (acc[name] || 0) + amount;
  return acc;
}, {}); // 初始值为空对象

// 找获胜者的逻辑和方案一一致
let winner = '';
let highestTotal = 0;
for (const name in totalAmounts) {
  if (totalAmounts[name] > highestTotal) {
    highestTotal = totalAmounts[name];
    winner = name;
  }
}

console.log(winner); // 输出结果:Peter

关键细节说明

  • 拆分字符串:split(' ')适用于当前「姓名+空格+金额」的格式,如果姓名包含空格,需要调整拆分规则,但当前需求下完全适用。
  • 金额转数字:必须用parseFloat或Number()把字符串转成数字,否则字符串相加会变成拼接(比如"0.4"+"0.5"会得到"0.40.5",而非0.9)。
  • 平局处理:如果两人总金额相同,上述代码会返回先遍历到的人;若需要处理平局,可以在最后添加逻辑,收集所有最高金额的姓名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:32:30