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”,我真的不知道如何使用我上面描述的方式计算平均值!
只需使用一个对象,键表示数组对象的 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每秒向函数发送一个数组,然后在控制台中显示完成的对象。