【发布时间】:2020-03-23 02:03:06
【问题描述】:
我有一个产品对象数组,每个产品除了代表所用货币的嵌套对象外还包含产品价格。
var products = [
{
'id': '1',
'currency': { id:1, name:'Dollar' },
'price': '100'
}, {
'id': '4',
'currency': {
id:2,
name:'Euro',
current_quotation: {
date: '2020-03-02',
quotation: 68
}
},
'price': '300'
}, {
'id': '6',
'currency': { id:1, name:'Dollar' },
'price': '50'
}, {
'id': '16',
'currency': null,
'price': '50'
}, {
'id': '23',
'currency': { id:2, name:'Euro' },
'price': null
}
];
我想要做的是获得一个数组,其中每个货币都有一个唯一的对象及其价格总和,最好使用 lodash 或 ES6 脚本。结果我需要的是:
var subtotals = [
{currency:'Dollar', total: 150},
{currency:'Euro', total: 300}
]
我尝试了很多样品,但到目前为止没有运气。我的方法是这样,但它返回数组中的整个产品对象,这与预期结果相差甚远
let subtotals = state.products.reduce((h, product) => Object.assign(h, { [product.currency?.name]:( h[product.currency?.name] || [] ).concat({currency: product.currency?.name, price: product.price}) }), {})
结果
{
"Euro":[
{"currency":"Euro","price":"300"}
],
"Dolar":[
{"currency":"Dolar","price":"100"},
{"currency":"Dolar","price":"50"}
]
}
请注意,有些产品一开始可能没有货币,因为它的价值来自下拉输入。在这种情况下,可以在结果中省略该值。
任何帮助将不胜感激。
【问题讨论】:
-
@CertainPerformance 我已经编辑了代码,只是一个错字。我需要用相同的货币对对象求和,根本没有减法。
标签: javascript arrays object grouping lodash