微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript / JSON – 从多个数组中获取具有相同键的值的总平均值

我收到来自后端的实时响应,其中包含以下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 举报,一经查实,本站将立刻删除。

相关推荐