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

如何在JavaScript中通过比较两个对象的键值计算总和?

实现方案

要算出匹配后的数值总和,核心是提取values里所有的答案标识(比如Q1A1),再对应到points里的数值累加。这里给两种常用实现方式:

方式一:嵌套循环累加

直接遍历values的外层分组(Q1、Q2、Q3),再遍历每个分组里的答案标识,逐个取points的值加起来:

const values = {
    Q1: { Q1A1: "Yes" },
    Q2: { Q2A1: "Yes" },
    Q3: { Q3A2: "No" },
};

const points = {
    Q1A1: 41, Q1A2: 0,
    Q2A1: 19, Q2A2: 0,
    Q3A1: 25, Q3A2: 0,
};

let total = 0;

// 遍历每个问题分组
for (const group of Object.values(values)) {
    // 遍历分组里的答案标识
    for (const key of Object.keys(group)) {
        // 累加对应分数,加||0避免无匹配键时出现NaN
        total += points[key] || 0;
    }
}

console.log(total); // 输出60

方式二:扁平化后用reduce求和

先把所有答案标识提取成数组,再用reduce一步算出总和,写法更简洁:

const values = {
    Q1: { Q1A1: "Yes" },
    Q2: { Q2A1: "Yes" },
    Q3: { Q3A2: "No" },
};

const points = {
    Q1A1: 41, Q1A2: 0,
    Q2A1: 19, Q2A2: 0,
    Q3A1: 25, Q3A2: 0,
};

// 提取所有答案标识到数组
const answerKeys = Object.values(values).flatMap(group => Object.keys(group));

// 累加求和
const total = answerKeys.reduce((sum, key) => sum + (points[key] || 0), 0);

console.log(total); // 输出60

补充说明

两种方法最终都会匹配到Q1A1(41)、Q2A1(19)、Q3A2(0),总和41+19+0=60,完全符合预期。加|| 0是为了容错——如果points里没有对应键,会自动加0,避免出现NaN破坏计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:13