计算每个reduce操作的互动次数
P粉191323236
P粉191323236 2023-08-14 17:21:30
[React讨论组]

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

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)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号