如何对这些Javascript值求和?

如何对这些Javascript值求和?,javascript,jquery,json,object,Javascript,Jquery,Json,Object,我有以下对象数组。每个对象中都有一对对象,供两个人使用。它持有分数,例如,鲍勃的第一场比赛得10分,然后第二场比赛得9分等等 var arr = [{ "bob": { "1": "10", "2": "9", "3": "9", "4": "10", "5": "9", "6": "7", "7": "10", "8": "10", "9": "10", "10": "9", "11": "10",

我有以下对象数组。每个对象中都有一对对象,供两个人使用。它持有分数,例如,鲍勃的第一场比赛得10分,然后第二场比赛得9分等等

var arr = [{
  "bob": {
    "1": "10",
    "2": "9",
    "3": "9",
    "4": "10",
    "5": "9",
    "6": "7",
    "7": "10",
    "8": "10",
    "9": "10",
    "10": "9",
    "11": "10",
    "12": "8"
  },
  "max": {
    "1": "9",
    "2": "10",
    "3": "10",
    "4": "8",
    "5": "10",
    "6": "10",
    "7": "8",
    "8": "9",
    "9": "9",
    "10": "10",
    "11": "9",
    "12": "10"
  }
},

{
  "bob": {
    "1": "10",
    "2": "9",
    "3": "9",
    "4": "10",
    "5": "9",
    "6": "7",
    "7": "10",
    "8": "10",
    "9": "10",
    "10": "9",
    "11": "10",
    "12": "8"
  },
  "max": {
    "1": "9",
    "2": "10",
    "3": "10",
    "4": "8",
    "5": "10",
    "6": "10",
    "7": "8",
    "8": "9",
    "9": "9",
    "10": "10",
    "11": "9",
    "12": "10"
  }
},
{
  "bob": {
    "1": "10",
    "2": "9",
    "3": "9",
    "4": "10",
    "5": "9",
    "6": "7",
    "7": "10",
    "8": "10",
    "9": "10",
    "10": "9",
    "11": "10",
    "12": "8"
  },
  "max": {
    "1": "9",
    "2": "10",
    "3": "10",
    "4": "8",
    "5": "10",
    "6": "10",
    "7": "8",
    "8": "9",
    "9": "9",
    "10": "10",
    "11": "9",
    "12": "10"
  }
}
]
如何循环遍历每对对象(bob和max)并创建所有对象的平均值?我发现循环中的循环确实令人困惑。。。我正在努力写这个问题

最终目标是拥有一对对象,其中的值将与数组中以前的所有对象平均。例如,对于每个人,我需要将每个人的分数相加(分数1-12),然后创建一个最终平均分数。我希望这有意义?就我所尝试的而言,我试图操纵许多其他SO答案来满足我的需要,但我不断地遇到错误,因此不值得发布此

 // Final averaged scores for each person based on the total data available
[{
  "bob": {
    "1": "10",
    "2": "9",
    "3": "9",
    "4": "10",
    "5": "9",
    "6": "7",
    "7": "10",
    "8": "10",
    "9": "10",
    "10": "9",
    "11": "10",
    "12": "8"
  },
  "max": {
    "1": "9",
    "2": "10",
    "3": "10",
    "4": "8",
    "5": "10",
    "6": "10",
    "7": "8",
    "8": "9",
    "9": "9",
    "10": "10",
    "11": "9",
    "12": "10"
  }
}]

您可以使用
array.map
array.reduce
的组合来返回分数总和

console.clear();
var博弈=[
{
“bob”:{“1”:“10”,“2”:“9”,“3”:“9”,“4”:“10”},
“max”:{“1”:“9”、“2”:“10”、“3”:“10”、“4”:“8”}
},
{
“bob”:{“1”:“10”,“2”:“9”,“3”:“9”,“4”:“10”},
“max”:{“1”:“9”、“2”:“10”、“3”:“10”、“4”:“8”}
},
{
“bob”:{“1”:“10”,“2”:“9”,“3”:“9”,“4”:“10”},
“max”:{“1”:“9”、“2”:“10”、“3”:“10”、“4”:“8”}
}
];
让分数={};
games.forEach(games=>{
Object.keys(游戏).forEach(玩家=>{
得分[球员]=得分[球员]|{};
Object.keys(游戏[玩家]).forEach(游戏编号=>{
分数[玩家][gameNumber]=分数[玩家][gameNumber]| |[];
得分[玩家][游戏编号]。推送(parseInt(游戏[玩家][游戏编号]);
});
});
});
Object.keys(分数).forEach(玩家=>{
Object.key(分数[玩家]).forEach(游戏=>{
让total=得分[玩家][游戏].减少((a,b)=>{返回a+b;});
让长度=分数[玩家][游戏].长度;
分数[玩家][游戏]=总成绩/长度;
});
});

控制台信息(分数)您可以采用单循环方法来计算所需的平均值。该提案的特点是ES5

变量:

  • r
    :临时结果
  • o
    :对象,数组的一项
  • a
    :调用数组的引用,长度所需
  • k
    l
    :嵌套对象的键
模式:

  • | |
    :作为默认运算符
var数组=[{bob:{1:10,2:9,3:9,4:10,5:9,6:7,7:10,8:10,9:10,10:9,11:10,12:8},max:{1:9,2:10,2:10,12:8},max:{1:9,2:10,4:8,5:10,6:10,7:8,8:9,8:9,12:10},{bob:{1:10,2:9,9,3:9,4:10,5:9,6:7,10:10,10:10,10:9,10,10,10:9},11:“10”,12:“8”},马克斯:{1:“9”,2:“10”,3:“10”,4:“8”,5:“10”,6:“10”,7:“8”,8:“9”,9:“9”,10:“10”,11:“10”,11:“9”,12:“9”,12:“9”},马克斯:{bob:{1:{1:“10”,2:“9”,3:“9”,4:“10”,5:“9”,5:“9”,6:“7:“7:“7:“10”,10:“9:“10:“9”,马克斯:{, 11: "9", 12: "10" } }],
结果=数组.reduce(函数(r,o,u,a){
Object.keys(o).forEach(函数(k){
r[k]=r[k]|{};
Object.keys(o[k]).forEach(函数(l){
r[k][l]=(r[k][l]| | 0)+o[k][l]/a.长度;
});
});
返回r;
}, {});
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
我使用了基本循环:

var gameCount = arr.length;

var outPutArr = {"bob":{},"max":{}};

// Initialize the output array
for(var i=1;i<=Object.keys(arr[0].bob).length;i++)
{
    outPutArr["bob"][i+""] = "0";
    outPutArr["max"][i+""] = "0";
}

// Loop through all games and add score of bob and max
arr.forEach(function(item){
    for(var i=1;i<=Object.keys(arr[0].bob).length;i++)
    {
        outPutArr["bob"][i+""] = (parseInt(item["bob"][i+""]) + parseInt(outPutArr["bob"][i+""]))+"";
        outPutArr["max"][i+""] = (parseInt(item["max"][i+""]) + parseInt(outPutArr["max"][i+""]))+"";
    }
});

for(var i=1;i<=Object.keys(arr[0].bob).length;i++)
{
    outPutArr["bob"][i+""] = (parseInt(outPutArr["bob"] [i+""])/gameCount)+"";
    outPutArr["max"][i+""] = (parseInt(outPutArr["max"] [i+""])/gameCount)+"";
}

console.log(JSON.stringify(outPutArr));
var gameCount=arr.length;
var outPutArr={“bob”:{},“max”:{};
//初始化输出数组

对于(var i=1;i这是您想要的吗? 它为用户计算您拥有多少游戏的分数(只要每个对象的分数不是100+),并将结果存储在summs对象中

您可以在控制台中从以下位置观察结果:

var-arr=[{
“鲍勃”:{
"1": "10",
"2": "9",
"3": "9",
"4": "10",
"5": "9",
"6": "7",
"7": "10",
"8": "10",
"9": "10",
"10": "9",
"11": "10",
"12": "8"
},
“最大值”:{
"1": "9",
"2": "10",
"3": "10",
"4": "8",
"5": "10",
"6": "10",
"7": "8",
"8": "9",
"9": "9",
"10": "10",
"11": "9",
"12": "10"
}
},
{
“鲍勃”:{
"1": "10",
"2": "9",
"3": "9",
"4": "10",
"5": "9",
"6": "7",
"7": "10",
"8": "10",
"9": "10",
"10": "9",
"11": "10",
"12": "8"
},
“最大值”:{
"1": "9",
"2": "10",
"3": "10",
"4": "8",
"5": "10",
"6": "10",
"7": "8",
"8": "9",
"9": "9",
"10": "10",
"11": "9",
"12": "10"
}
},
{
“鲍勃”:{
"1": "10",
"2": "9",
"3": "9",
"4": "10",
"5": "9",
"6": "7",
"7": "10",
"8": "10",
"9": "10",
"10": "9",
"11": "10",
"12": "8"
},
“最大值”:{
"1": "9",
"2": "10",
"3": "10",
"4": "8",
"5": "10",
"6": "10",
"7": "8",
"8": "9",
"9": "9",
"10": "10",
"11": "9",
"12": "10"
}
}
]
var summs={};
arr.forEach(函数(用户、ind、arr){
for(用户中的var用户){
if(users.hasOwnProperty(user)){
如果(!summs.hasOwnProperty(user))summs[user]=0;
console.log(用户[用户]);
对于(变量i=0;i<100;i++){
if(用户[user].hasOwnProperty(i+“”)){
summs[user]+=parseInt(users[user][i]);
}
}
}
} 
});
控制台日志(summs);

如果要使用数字键,为什么不使用数组?因为它在脚本中的其他地方有其他用途,与此问题无关。我不清楚你的目标。你想要Bob的所有“1”、“2”等分数的平均值吗(Max也一样)?是的,所以…以每个对象中的所有BOB分数为例,创建一个平均分数对象
arr.reduce(function(res, obj, index, array) {
    Object.keys(obj).forEach(function(player) {
        res[player] = res[player] || {};
        Object.keys(obj[player]).forEach(function(game) {
            res[player][game] = res[player][game] || 0;
            res[player][game] += parseFloat(obj[player][game] / array.length);
        });
    });
    return res;
}, {});
var arr = [{
  "bob": {
    "1": "10",
    "2": "9",
    "3": "9",
    "4": "10",
    "5": "9",
    "6": "7",
    "7": "10",
    "8": "10",
    "9": "10",
    "10": "9",
    "11": "10",
    "12": "8"
  },
  "max": {
    "1": "9",
    "2": "10",
    "3": "10",
    "4": "8",
    "5": "10",
    "6": "10",
    "7": "8",
    "8": "9",
    "9": "9",
    "10": "10",
    "11": "9",
    "12": "10"
  }
},

{
  "bob": {
    "1": "10",
    "2": "9",
    "3": "9",
    "4": "10",
    "5": "9",
    "6": "7",
    "7": "10",
    "8": "10",
    "9": "10",
    "10": "9",
    "11": "10",
    "12": "8"
  },
  "max": {
    "1": "9",
    "2": "10",
    "3": "10",
    "4": "8",
    "5": "10",
    "6": "10",
    "7": "8",
    "8": "9",
    "9": "9",
    "10": "10",
    "11": "9",
    "12": "10"
  }
},
{
  "bob": {
    "1": "10",
    "2": "9",
    "3": "9",
    "4": "10",
    "5": "9",
    "6": "7",
    "7": "10",
    "8": "10",
    "9": "10",
    "10": "9",
    "11": "10",
    "12": "8"
  },
  "max": {
    "1": "9",
    "2": "10",
    "3": "10",
    "4": "8",
    "5": "10",
    "6": "10",
    "7": "8",
    "8": "9",
    "9": "9",
    "10": "10",
    "11": "9",
    "12": "10"
  }
}
]

var summs = {};

arr.forEach(function(users, ind, arr){
    for (var user in users) {
    if (users.hasOwnProperty(user)) {
      if (!summs.hasOwnProperty(user)) summs[user] = 0;
      console.log(users[user]);
        for (var i = 0; i < 100; i++){
            if (users[user].hasOwnProperty(i+'')){
                summs[user] += parseInt(users[user][i]);
            }
      }
    }
  } 
});
console.log(summs);