我试图获取对象的唯一键,添加值并计算每个键的唯一键数,但无法找到优雅的解决方案。
objs的原始数组:
[{
"2017W40": 15.25
}, {
"2017W40": 16.5
}, {
"2017W40": 16.6
}, {
"2017W40": 11
}, {
"2017W40": 17.857142857142858
}, {
"2017W40": 13
}, {
"2017W41": 19
}, {
"2017W41": 20.25
}, {
"2017W41": 18.25
}, {
"2017W41": 13
}, {
"2017W41": 20.333333333333332
}, {
"2017W41": 20.5
}, {
"2017W41": 20.5
}, {
"2017W42": 19.5
}, {
"2017W42": 19.5
}, {
"2017W42": 20
}, {
"2017W42": 19.5
}, {
"2017W42": 19.333333333333332
}, {
"2017W42": 20
}, {
"2017W42": 20.5
}, {
"2017W43": 20
}, {
"2017W43": 20
}, {
"2017W43": 19.666666666666668
}, {
"2017W43": 19.6
}, {
"2017W43": 19.666666666666668
}, {
"2017W43": 19
}, {
"2017W43": 19.5
}, {
"2017W44": 21
}, {
"2017W44": 19.5
}, {
"2017W44": 20
}, {
"2017W44": 19.5
}]
总结对象:
{
"2017W40": 90.20714285714286,
"2017W41": 131.83333333333331,
"2017W42": 138.33333333333331,
"2017W43": 137.43333333333334,
"2017W44": 80
}
但是我也希望包括每个的计数(所以我可以得到一个平均值而不仅仅是总和)这是我使用的方法:
function getValueAvg(valsByKey) {
const dateObj = {};
for (let i = 0; i < valsByKey.length; ++i) {
for (const obj in valsByKey[i]) {
if (dateObj[obj]) {
// add them if exists already
dateObj[obj] = dateObj[obj] + valsByKey[i][obj];
} else {
// first
dateObj[obj] = valsByKey[i][obj];
}
}
}
所以要么是
的最终目标{
{"2017W40": 90.20714285714286, count:x},
{"2017W41": 131.83333333333331, count:x},
{"2017W42": 138.33333333333331, count:x},
{"2017W43": 137.43333333333334, count:x},
{"2017W44": 80, count:x}
}
或只是除以数量的值将为我创造奇迹。 &#34; 2017W40&#34;:90.20714285714286 / count
答案 0 :(得分:0)
您可以创建具有两个字段的新对象,值或求和字段以及计数字段。迭代数据时,只需添加到值字段中,然后将计数加1。
function getValueAvg(valsByKey) {
const dateObj = {};
for (let i = 0; i < valsByKey.length; ++i) {
for (const obj in valsByKey[i]) {
if (dateObj[obj]) {
// add them if exists already
dateObj[obj].val = dateObj[obj].val + valsByKey[i][obj];
dateObj[obj].count += 1;
} else {
// first
dateObj[obj] = {"val":valsByKey[i][obj], "count":1};
}
}
}
return dateObj;
}
var data = [{
"2017W40": 15.25
}, {
"2017W40": 16.5
}, {
"2017W40": 16.6
}, {
"2017W40": 11
}, {
"2017W40": 17.857142857142858
}, {
"2017W40": 13
}, {
"2017W41": 19
}, {
"2017W41": 20.25
}, {
"2017W41": 18.25
}, {
"2017W41": 13
}, {
"2017W41": 20.333333333333332
}, {
"2017W41": 20.5
}, {
"2017W41": 20.5
}, {
"2017W42": 19.5
}, {
"2017W42": 19.5
}, {
"2017W42": 20
}, {
"2017W42": 19.5
}, {
"2017W42": 19.333333333333332
}, {
"2017W42": 20
}, {
"2017W42": 20.5
}, {
"2017W43": 20
}, {
"2017W43": 20
}, {
"2017W43": 19.666666666666668
}, {
"2017W43": 19.6
}, {
"2017W43": 19.666666666666668
}, {
"2017W43": 19
}, {
"2017W43": 19.5
}, {
"2017W44": 21
}, {
"2017W44": 19.5
}, {
"2017W44": 20
}, {
"2017W44": 19.5
}]
console.log(getValueAvg(data));