首页 > 解决方案 > 对对象数组中的嵌套对象值求和

问题描述

我有一个对象数组-

[{
    title: "oranges",
    id: 5802537,
    cart: {
      purchased: 3,
      stockTotal: 9
    },
    price: 3,
    department: "fresh fruit and veg"
  },
  {
    title: "pasta",
    id: 5802537,
    cart: {
      purchased: 2,
      stockTotal: 15
    },
    price: 1,
    department: "dry goods"
  },
  {
    title: "eggs",
    id: 5802537,
    cart: {
      purchased: 1,
      stockTotal: 11
    },
    price: 2,
    department: "baking"
  }
]

我正在尝试编写一个函数,它将所有的 stockTotal 加起来并从每个对象购买。我试过这个 -

let val = items.reduce(function(previousValue, currentValue) {
  return {
    purchased: previousValue.cart.purchased + currentValue.cart.purchased,
    stockTotal: previousValue.cart.stockTotal + currentValue.cart.stockTotal
  };
});

console.log(val);

但是,它说它无法读取未定义的属性“购买”,也无法读取未定义的属性“stockTotal”。我想知道这是否是因为 stockTotal 和 purchase 都在数组中每个对象内的它们自己的对象中?

标签: javascriptarraysjsonreactjsreduce

解决方案


您需要为 reduce 累加器(previousValue我已更改为acc)提供一个初始值,并在每次迭代中从acc(或使用 0 作为后备)获取当前值,并将项目的值添加到其中:

const items = [{"title":"oranges","id":5802537,"cart":{"purchased":3,"stockTotal":9},"price":3,"department":"fresh fruit and veg"},{"title":"pasta","id":5802537,"cart":{"purchased":2,"stockTotal":15},"price":1,"department":"dry goods"},{"title":"eggs","id":5802537,"cart":{"purchased":1,"stockTotal":11},"price":2,"department":"baking"}];

const val = items.reduce(function(acc, currentValue) {
  return {
    purchased: (acc.purchased ?? 0) + currentValue.cart.purchased,
    stockTotal: (acc.stockTotal ?? 0) + currentValue.cart.stockTotal
  };
}, {});

console.log(val);


推荐阅读