计算每个reduce操作的互动次数
P粉191323236
P粉191323236 2023-08-14 17:21:30
0
1
388

我有一个对象列表,如下:

const usageCosts = { 224910186407: { deviceId: "224910186407", currency: "GBP", yearlyUsage: 1480.81 }, 224910464538: { deviceId: "224910464538", currency: "GBP", yearlyUsage: 617.36 }, 224910464577: { deviceId: "224910464577", currency: "EUR", yearlyUsage: 522.3 } }

我正在按货币进行求和,如下:

const totalYearlyCost = Object.values(usageCosts).reduce( (acc: { [key: string]: any }, stat: any) => { if (stat.currency && !acc[stat.currency]) { acc[stat.currency] = 0 } return { ...acc, [stat.currency!]: acc[stat.currency!] + stat.yearlyUsage, } }, {}, )

它返回一个对象,如下:

{ EUR: 522.3 GBP: 2,098.17 }

我还想返回每种货币的设备总数,类似于:

{ EUR: 522.3 (1个设备) GBP: 2,098.17 (2个设备) }

尝试添加另一个循环,但结果不如预期。

P粉191323236
P粉191323236

全部回复 (1)
P粉481815897

这个任务分为两个部分会更容易。

首先,将其reduce为一个包含分组值的数组。

然后循环遍历(也可以使用reduce)对象,并获取数组的总和,并将${array.length} devices添加到字符串中:

const usageCosts = { 224910186407: { deviceId: "224910186407", currency: "GBP", yearlyUsage: 1480.81 }, 224910464538: { deviceId: "224910464538", currency: "GBP", yearlyUsage: 617.36 }, 224910464577: { deviceId: "224910464577", currency: "EUR", yearlyUsage: 522.3 } } let grouped = Object.values(usageCosts).reduce((p, c) => { if (!p[c.currency]) p[c.currency] = []; p[c.currency].push(c.yearlyUsage); return p; }, {}); for (var key in grouped) { grouped[key] = `${grouped[key].reduce((a,b)=>a+b)} (${grouped[key].length}) devices`; } console.log(grouped)
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!