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

JavaScript中如何正确访问对象数组属性?循环求和代码报错

计算对象数组总费用的代码问题修正

你的代码存在几个逻辑错误,导致无法正确计算总费用,下面逐一说明并给出修正方案:

原代码中的错误点

  • 数组遍历方式错误:list是数组类型,Object.keys(list)返回的是数组的索引字符串(比如"0"),你把索引值当成数组元素去访问.items属性,这完全不符合逻辑——索引字符串根本没有items属性。
  • for...in遍历数组误用:即便拿到了正确的分类对象,for (i in k.items)中的i是数组的索引(字符串类型),并非数组里的子项对象,而且子项中不存在data属性,你需要访问的是cost属性。
  • 未声明变量:i没有用let/const声明,会成为全局变量,容易引发意外问题。

修正后的代码(forEach版本)

const list = [
      {
        title: 'Groceries',
        items: [
          {
            id: 4,
            title: 'Food',
            cost: 540 ,
          },
          {
            id: 5,
            title: 'Hygiene',
            cost: 235,
          },
          {
            id: 6,
            title: 'Other',
            cost: 20,
          },
        ],
      }];

function calculateCost(){
  let total = 0;
  // 遍历list中的每个分类对象
  list.forEach((category) => {
    // 遍历当前分类下的所有子项
    category.items.forEach((item) => {
      total += item.cost;
    });
  });
  console.log(total); // 输出795
  return total;
}

更简洁的reduce版本

如果想让代码更紧凑,可以使用数组的reduce方法嵌套计算:

function calculateCost(){
  return list.reduce((total, category) => {
    // 累加当前分类下所有子项的cost
    return total + category.items.reduce((sum, item) => sum + item.cost, 0);
  }, 0);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:55:19