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

如何访问对象所有属性并求和,实现orderSupplies函数的正确计算?

解决orderSupplies函数的实现问题

需求说明

实现orderSupplies函数,它接收两个参数:

  • supplies对象:键为派对用品名称,值为该用品的单件成本
  • guests数值:参会宾客的人数
    函数需返回为每位宾客订购一件各类用品的总成本。

代码示例

orderSupplies({ cake: 2, iceCream: 7 }, 2);
// 预期返回 18 (计算逻辑:(2+7)*2 = 18)

orderSupplies({ plates: 2, cups: 1, forks: 1, partyHats: 4 }, 20);
// 预期返回 160 (计算逻辑:(2+1+1+4)*20 = 160)

原代码的问题

当前给出的实现有两个核心错误:

  1. 对象没有length属性,用数组式的for循环遍历完全无效
  2. 循环中直接累加supplies对象本身,而不是对象里的属性值

正确实现方法

方法1:用for...in遍历对象属性

function orderSupplies(supplies, guests) {
    let totalPerPerson = 0;
    // 遍历supplies的所有属性
    for (const item in supplies) {
        totalPerPerson += supplies[item];
    }
    // 单人总成本乘以宾客数得到最终费用
    return totalPerPerson * guests;
}

方法2:用Object.values()+reduce快速求和

function orderSupplies(supplies, guests) {
    // 获取所有用品成本的数组,再用reduce累加求和
    const totalPerPerson = Object.values(supplies).reduce((sum, cost) => sum + cost, 0);
    return totalPerPerson * guests;
}

方法3:用Object.entries()遍历键值对

function orderSupplies(supplies, guests) {
    let totalPerPerson = 0;
    // 遍历每个[用品名称, 成本]的键值对
    for (const [_, cost] of Object.entries(supplies)) {
        totalPerPerson += cost;
    }
    return totalPerPerson * guests;
}

关键知识点

  • 对象无法像数组那样通过索引和length遍历,必须使用对象专用的遍历方法
  • Object.values()会直接返回对象所有属性值组成的数组,是快速求和的简洁方案
  • 如果需要避免遍历到原型链上的属性,for...in可以配合supplies.hasOwnProperty(item)判断(普通业务场景下的supplies对象一般不需要)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:56:15