如何在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
相关产品推荐
相关产品推荐

