【发布时间】:2021-12-23 04:12:03
【问题描述】:
我想创建一个算法,可以通过过滤和求和值将我的对象键:值对聚合到一个新对象中
我希望过滤名称以便它们只聚合一次,例如可能有多个 ana-json-to-parquet 值。 count 键是给定proc_nm 中成功、失败等的次数
- 过滤 proc 名称(postgres-loader、ana-json-to-parquet 等)
- 过滤状态(成功、失败、致命、警告等)
- 过程名称的每个状态的总和计数
所以一个示例结果是
ana-json-to-parquet: {
success: 500
fail:523
fatal:0
...
...
},
postgres-loader: {
success: 2313
fail: 2131
fatal: 1
...
...
},
数据对象示例:
{
proc_nm: ana-json-to-parquet
count:2
date:2021-11-04 00:00:00
status:warning
},
{
proc_nm: ana-json-to-parquet
count:50
date:2021-11-04 00:00:00
status:fatal
},
有多个 proc_names,我知道日期是同一小时的,它们按小时查询,因此在一小时内可能有多个相同 proc_names 的条目具有不同的状态和计数
尝试:我可以对每个 proc_nm 的计数求和,并将数据存储在一个新对象中,但在这种情况下,我想为每个 proc_nm 创建一个对象并聚合每个 proc_nm 和状态的计数
const data = datastream.rows
var results = {};
var totals = {};
for (var d = 0; d < data.length; d++) {
var o = data[d];
var proc = o["proc_nm"];
var values = results[proc] || {};
// Since the column names may change, we need to loop over the object
for (var key in o) {
// remove the undeeded keys
if (o.hasOwnProperty(key) && key.toLowerCase() != "proc_nm" && key.toLowerCase() != "date_trunc") {
// Now find the entry in the values obj that matches
var column = values[key] || 0;
// And the corresponding entry in the totals object
var totalsColumn = totals[key] || 0;
column += parseFloat(o[key]);
totalsColumn += parseFloat(o[key]);
values[key] = column;
totals[key] = totalsColumn;
}
}
results[proc] = values;
}
【问题讨论】:
标签: javascript algorithm