javascript - 对对象数组中的嵌套对象值求和
问题描述
我有一个对象数组-
[{
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 都在数组中每个对象内的它们自己的对象中?
解决方案
您需要为 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);
推荐阅读
- python - 对 LPTHW ex41 感到困惑:关于 PHRASE_FIRST 代码
- java - 如何在 JdbcTemplate 中使用带有可选查询参数的 sql?
- php - storeAs 函数在 /tmp/ Laravel 中存储具有随机名称的文件
- c++ - QML:修改在不同 QML 文件(不是 main.qml)中定义的子对象的属性
- python - 如何在 cloudera 集群上本地运行 Python/IPYNB(使用 pyspark/sklearn 模块)
- android - 使用下载管理器下载文件
- allen-sdk - 可在 RMA 查询中使用的所有有效参数和标准的列表
- java - 如何在 lamda 表达式中使用 super::methodName 引用方法的超类版本
- javascript - 在标签中漂亮地打印 JSON
- android - 将 swipeRefresh 进度的位置更改为中心