javascript - 每个 id 的嵌套对象求和
问题描述
我需要根据“fromSuppliers”属性中的id对产品数组属性中的所有“价格”求和。最好的方法是什么?我尝试过使用 map 和 reduce,但没有成功。任何帮助将不胜感激。
此示例的预期输出:
[
{ id: 1, totalPrice: 19,84 }
{ id: 2, totalPrice: 9.84 }
]
对象:
const Jsonresult = {
items: {
'**9089**': {
createdAt: '2021-02-11T17:25:22.960-03:00',
product: [{
fromSuppliers: {
productSupplier: {
stock: 102,
promoPrice: 16,
},
'**id**': 2
}
}],
total: 9.84,
quantity: 1,
price: '**9.84**',
updatedAt: '2021-02-11T17:25:22.960-03:00'
},
'**9090**': {
createdAt: '2021-02-11T17:25:22.960-03:00',
product: [{
fromSuppliers: {
productSupplier: {
stock: 102,
promoPrice: 7,
},
'**id**': 1
}
}],
total: 9.84,
quantity: 1,
'**price**': 9.84,
updatedAt: '2021-02-11T17:25:22.960-03:00'
},
'**9091**': {
createdAt: '2021-02-11T17:25:22.960-03:00',
product: [{
fromSuppliers: {
productSupplier: {
stock: 102,
promoPrice: 7,
},
'**id**': 1
}
}],
total: 9.84,
quantity: 1,
'**price**': 10,
updatedAt: '2021-02-11T17:25:22.960-03:00'
},
}
解决方案
您可以使用Object.values()
来获取您的items
. 然后我们将使用Array.reduce()
创建一个地图对象,以id
. 我们将再次使用 Object.values 将地图对象转换为数组。
const Jsonresult = { items: { '9089': { createdAt: '2021-02-11T17:25:22.960-03:00', product: [{ fromSuppliers: { productSupplier: { stock: 102, promoPrice: 16, }, id: 2 } }], total: 9.84, quantity: 1, price: 9.84, updatedAt: '2021-02-11T17:25:22.960-03:00' }, '9090': { createdAt: '2021-02-11T17:25:22.960-03:00', product: [{ fromSuppliers: { productSupplier: { stock: 102, promoPrice: 7, }, id: 1 } }], total: 9.84, quantity: 1, price: 9.84, updatedAt: '2021-02-11T17:25:22.960-03:00' }, '9091': { createdAt: '2021-02-11T17:25:22.960-03:00', product: [{ fromSuppliers: { productSupplier: { stock: 102, promoPrice: 7, }, id: 1 } }], total: 9.84, quantity: 1, price: 10, updatedAt: '2021-02-11T17:25:22.960-03:00' }, } };
const items = Object.values(Jsonresult.items);
const result = Object.values(items.reduce((acc, { price, product: [ { fromSuppliers: { id }} ]}) => {
if (!acc[id]) acc[id] = { id, price: 0 };
acc[id].price += price;
return acc;
}, {}));
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- python - 等效于 Python 中的“qt”R 函数
- azure-devops - 如何在不部署的情况下调试和开发 Azure DevOps 扩展?
- node.js - 热键正确杀死节点进程并释放使用的端口
- vim - 设置由 ghcide 生成的多行错误消息的错误格式
- php - 在 CakePHP 3 中包含连接后加入子查询
- python - Python合并两个csv文件python
- python - 如何避免使用 python Wand 为 dds 创建 mipmap?
- azure - 如何使用 powershell 获取 Azure 虚拟机规模集实例的列表
- enterprise-architect - 操作方法/您可以在 Enterprise Architect 15 中从导入的数据库生成序列图或数据流图吗?
- python - pylint 引发错误,但代码对我有用