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

Ham*_* L. 3 javascript arrays jquery json

我收到来自后端的实时响应,其中包含以下 JSON(几乎每秒):

一列:

 {
"newUpdate": [ 
{
    "id": "TP", 
    "val" : 3
},
{ 
    "id": "TPE20", 
    "val" : 3
}]
 }
Run Code Online (Sandbox Code Playgroud)

另一个数组(一秒或更短后)

 {
"newUpdate": [ 
{
    "id": "CRK", 
    "val" : 24
},
{ 
    "id": "TPE20", 
    "val" : 44
}]
 }
Run Code Online (Sandbox Code Playgroud)

我几乎每秒都收到上述 JSON,知道每次它都带有不同的值和 ID,并且数组本身没有特定的大小。

好吧,我想要做的是获得具有相同键“id”的值的平均值。

例如,对于上述数组,平均值将为TPE20

(3+44)/2 =23.2 (as it computes the average for the id : TPE20)
Run Code Online (Sandbox Code Playgroud)

那么它应该在这里显示(例如使用JQuery)[想想股票市场中的实时平均值]

<div id="TPE20"></div>
Run Code Online (Sandbox Code Playgroud)

目前,使用下面的 for 循环,我打印上面列出的 JSON:

for(var i in load.updates){
var id =     load.newUpdate[i].id;
updatesMap[id] = load.newUpdate[i].value;
var valueOfID = newUpdate[id];
}
Run Code Online (Sandbox Code Playgroud)

挑战是我一次收到很多数组(1/秒),每个数组包含不同的“id”和“val”,我真的不知道如何使用我上面描述的方式计算平均值!

And*_*ndy 5

只需使用一个对象,键表示数组对象的 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;
  });
}
Run Code Online (Sandbox Code Playgroud)

这是一个模拟setInterval每秒向函数发送一个数组,然后在控制台中显示完成的对象。