gpt4 book ai didi

javascript - 如何使用 node-js 使用聚合函数

转载 作者:行者123 更新时间:2023-11-30 12:58:16 25 4
gpt4 key购买 nike

我有一个 json,其中包含名为 chargeamountunitLevel 的数组。我想通过按 chargeAmountUnit 分组来总结 chargeAmount。输入 json:

 "chargeamountunitLevel": [
{
"chargeAmount": 4,
"chargeAmountUnit": "per hour",
"currencyCode": "USD"
},
{
"chargeAmount": 50,
"chargeAmountUnit": "per hour",
"currencyCode": "USD"
},
{
"chargeAmount": 25,
"chargeAmountUnit": "per month",
"currencyCode": "USD"
},
{
"chargeAmount": 25,
"chargeAmountUnit": "per month",
"currencyCode": "USD"
}

]

结果可能如下:

    "chargeamountunitLevel": [
{
"chargeAmount": 54,
"chargeAmountUnit": "per hour",
"currencyCode": "USD"
},
{
"chargeAmount": 50,
"chargeAmountUnit": "per month",
"currencyCode": "USD"
}

]

有什么建议吗?

最佳答案

你总是可以使用 reduce功能。在这里,由于我们提供了一个 initialValue 作为 reduce 的第二个参数,因此第一次调用 callback 时,该值将作为result 参数。然后对于所有后续调用,result 将是上一次调用的返回值。

在这里,如果 ochargeAmountUnit 已经作为键存在,我们基本上会检查我们的 initialValue 对象。如果不是,我们创建一个与对象 o 具有相同属性值的新对象,并使用 chargeAmountUnit 将其放入我们的 initialValue 对象中> 作为关键。但是,如果它确实存在,我们将使用 chargeAmountUnit 作为键来检索先前创建的对象,然后我们简单地汇总相关值。

此外,您可能已经注意到我们正在将创建的对象放入一个数组中,那是因为最后您需要一个数组作为结果,而不是像这样的东西:

{
'per month': {...},
'per hour': {...}
}

方法如下:

data.reduce(function (result, o) {
var unit = o.chargeAmountUnit;
if (!(unit in result)) {
result.arr.push(result[unit] = {
chargeAmountUnit: unit,
chargeAmount: o.chargeAmount,
currencyCode: o.currencyCode
});
} else {
result[unit].chargeAmount += o.chargeAmount;
}

return result;
}, { arr: [] }).arr;

编辑:要按多个字段分组,您可以通过按字段字符串 值连接组来简单地按 创建一个组。

以下将根据 chargeAmountUnitcurrencyCode 进行分组。

data.reduce(function (result, o) {
//compute group by key
var key = o.chargeAmountUnit + o.currencyCode;
if (!(key in result)) {
result.arr.push(result[key] = {
chargeAmountUnit: o.chargeAmountUnit,
chargeAmount: o.chargeAmount,
currencyCode: o.currencyCode
});
} else {
result[key].chargeAmount += o.chargeAmount;
}

return result;
}, { arr: [] }).arr;

关于javascript - 如何使用 node-js 使用聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18299018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com