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

JavaScript如何统计嵌套对象数组中玩家各轮累计总票数

多回合累计得票统计实现

直接复用你已封装的单回合统计方法,通过玩家唯一ID做聚合累加即可,完全兼容项目中类实例的玩家对象场景,代码如下:

const getTotalVotesAllRounds = () => {
  // 以玩家ID为键建立哈希表,避免重复统计,保留原始玩家对象引用
  const voteMap = {};

  // 遍历所有游戏回合
  for (let roundIdx = 0; roundIdx < roundHistory.length; roundIdx++) {
    // 直接调用已有的单回合统计方法,不需要重复实现单回合逻辑
    const roundVoteData = getTotalReceivedVotesPerPlayerInRound(roundIdx);
    roundVoteData.forEach(record => {
      const playerId = record.player.id;
      // 首次遇到该玩家时初始化统计记录
      if (!voteMap[playerId]) {
        voteMap[playerId] = {
          player: record.player, // 直接存原始玩家对象/类实例,不丢失自定义方法
          totalVotes: 0
        };
      }
      // 累加当前回合得票数
      voteMap[playerId].totalVotes += record.totalVotes;
    });
  }

  // 转换为你需要的数组结构返回
  return Object.values(voteMap);
};

// 调用示例
const result = getTotalVotesAllRounds();
console.log(result);

注意点

  • 聚合时使用玩家id作为唯一标识,不受玩家对象属性变动、类实例方法扩展影响,统计稳定性高
  • 完全复用现有单回合统计逻辑,后续如果单回合计票规则调整(比如无效票过滤、加权计票),全量统计不需要修改代码会自动适配
  • 返回结果中的player字段是原始玩家对象的引用,你在类上封装的所有工具方法都可以正常调用
  • 针对你给出的两回合完全相同的测试数据,返回结果中player1累计得4票、player2累计得2票、player3累计得0票;如果你预期的结果是2/1/0,检查下roundHistory的实际长度,确认是否只存入了单回合数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:36:23