我收到来自后端的实时响应,其中包含以下JSON(几乎每秒):
一个阵列:
{
"newUpdate": [
{
"id": "TP",
"val" : 3
},
{
"id": "TPE20",
"val" : 3
}]
}
另一个数组(一秒或更短)
{
"newUpdate": [
{
"id": "CRK",
"val" : 24
},
{
"id": "TPE20",
"val" : 44
}]
}
我几乎每一秒都得到上面的JSON知道每次它带有不同的值和id,并且数组本身没有特定的大小.
好吧,我想要做的是获得具有相同键’id’的值的平均值.
例如,对于上面的数组,TPE20的平均值是:
(3+44)/2 =23.2 (as it computes the average for the id : TPE20)
然后它应该在这里显示它(例如使用JQuery)[想想股票市场中的实时平均值]
<div id="TPE20"></div>
目前,使用下面的for循环,我打印上面列出的JSON:
for(var i in load.updates){
var id = load.newUpdate[i].id;
updatesMap[id] = load.newUpdate[i].value;
var valueOfID = newUpdate[id];
}
挑战在于我一次接收大量数组(1 / sec),每个数组包含不同的“id”和“val”,我真的不知道如何使用上面描述的方式计算平均值!
解决方法:
只需使用一个对象,其中键表示数组对象的ID,值为对象,包含这些ID的计数,总数和平均值.
当您收到一个新数组时,只需更新该对象:
function updateObj(arr) {
arr.forEach(function(el) {
var key = el.id;
obj[key] = obj[key] || { count: 0, total: 0, avg: 0 };
obj[key].count++;
obj[key].total += el.val;
obj[key].avg = obj[key].total / obj[key].count;
});
}
Here’s a simulation with setInterval每秒向函数发送一个数组,然后在控制台中显示完成的对象.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。