如何将costs对象的值与done对象的系数相乘后求和?
对象对应键值相乘求和的实现方案
需求说明
需要将costs对象中每个键的值,与done对象对应键的系数相乘后,计算总和。示例如下:
const costs = {a: 2000, b: 5000, c: 4000} const done = {a: 1, b: 1, c: 2}
(1 * 2000) + (1 * 5000) + (2 * 4000) = 15000
原代码问题分析
你尝试的代码存在几个问题:
- 逻辑错误:
a[k] += (a[k] || 0) * b[k]的计算逻辑不符合需求,这是在对已有值和当前值做乘积后累加,而非两个对象对应键值的乘积累加。 - 目标不符:函数返回的是对象,但你需要的是求和后的数值。
- 参数错误:
sumObjectsByKey(obj1, obj2, obj3)中的obj1等变量未定义,且你的需求只需要处理两个对象。
正确实现方案
方案一:遍历键值对累加
const costs = {a: 2000, b: 5000, c: 4000}; const done = {a: 1, b: 1, c: 2}; function calculateTotal(costs, done) { let total = 0; // 遍历costs的所有键 for (const key of Object.keys(costs)) { // 确保done中存在对应键,避免计算出现NaN if (done[key] !== undefined) { total += costs[key] * done[key]; } } return total; } console.log(calculateTotal(costs, done)); // 输出 15000
方案二:使用reduce简化代码
const costs = {a: 2000, b: 5000, c: 4000}; const done = {a: 1, b: 1, c: 2}; const total = Object.keys(costs).reduce((sum, key) => { // 若done中无对应键,默认系数为0,不影响总和 return sum + costs[key] * (done[key] || 0); }, 0); console.log(total); // 输出 15000
注意事项
如果costs和done的键可能不完全匹配,记得处理不存在的键的情况(比如默认系数为0),避免计算结果出现NaN。
内容的提问来源于stack exchange,提问作者sima
相关产品推荐
相关产品推荐

