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

JavaScript如何按membershipType分组累加对应pointEarned值

会员按类型分组累加积分实现方案

原有代码问题说明

之前编写的逻辑存在3个核心问题:

  • 没有提前初始化subMemTypeCount统计对象,也没有给各会员类型设置初始0值
  • 仅单独对Ruby类型做了分支判断,没有覆盖所有需要统计的会员类型
  • 内层循环没有实际执行积分累加的逻辑,无法完成同组积分求和

正确实现逻辑

整个实现只需要4步即可完成:

  • 把所有实例化的会员对象存入统一数组,方便统一遍历
  • 初始化统计对象,提前写入所有需要展示的会员类型,对应初始积分设为0,避免无对应会员时取值异常
  • 遍历会员数组,将每个会员的积分累加到对应会员类型的统计值上
  • 按照要求的格式输出结果,输出时类型名统一使用小写

完整可运行代码

// 原有Member类定义
class Member {
    constructor (membershipType, pointsEarned) {
        this.membershipType = membershipType;
        this.pointEarned = pointsEarned;
    }
}

// 原有会员实例化代码
const John = new Member('Gold', 1400);
const Luke = new Member('Ruby', 250);
const Sam = new Member('Gold', 3350);
const Kelly = new Member('Diamond', 40200);

// 将所有会员存入统一遍历数组
const memberGroup = [John, Luke, Sam, Kelly];

// 初始化积分统计对象,预置所有待统计类型初始值为0
const subMemTypeCount = {
    Ruby: 0,
    Gold: 0,
    Platinum: 0,
    Diamond: 0
};

// 遍历会员列表累加对应类型积分
for (let i = 0; i < memberGroup.length; i++) {
    const member = memberGroup[i];
    const memberType = member.membershipType;
    // 仅统计预置列表内的会员类型
    if (subMemTypeCount.hasOwnProperty(memberType)) {
        subMemTypeCount[memberType] += member.pointEarned;
    }
}

// 按指定格式输出结果
console.log("Output:");
console.log("\t\truby: " + subMemTypeCount.Ruby);
console.log("\t\tgold: " + subMemTypeCount.Gold);
console.log("\t\tplatinum: " + subMemTypeCount.Platinum);
console.log("\t\tdiamond: " + subMemTypeCount.Diamond);

运行结果

代码执行后输出完全匹配预期:

Output:
       ruby: 250
       gold: 4750
       platinum: 0
       diamond: 40200

该实现扩展性更强,后续新增会员对象时只需要将实例加入memberGroup数组即可自动完成统计,不需要修改遍历和累加逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:25:32