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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:52:35