Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript->;添加具有相同名称的嵌套对象的值_Javascript_Json_Reactjs - Fatal编程技术网

Javascript->;添加具有相同名称的嵌套对象的值

Javascript->;添加具有相同名称的嵌套对象的值,javascript,json,reactjs,Javascript,Json,Reactjs,我试图计算每个球员每个问题的总分 对于每个问题,我将以以下格式检索数据 [ { "_id":"5ab24e5e49e0f20a06d73ab7", "player":"Kareltje", "answers": [ { "_id":"5ab227cf07818240934b11a5", "player":"Peter", "comment":"", "points":7,

我试图计算每个球员每个问题的总分

对于每个问题,我将以以下格式检索数据

[
  {
    "_id":"5ab24e5e49e0f20a06d73ab7",
    "player":"Kareltje",
    "answers":
    [
      {
        "_id":"5ab227cf07818240934b11a5",
        "player":"Peter",
        "comment":"",
        "points":7,
        "__v":0
      },
      {
        "_id":"5ab24bf3b8494c76fd0bb31a",
        "player":"André",
        "comment":"",
        "points":6,
        "__v":0
      },
      {
        "_id":"5ab24bf7b8494c76fd0bb31b",
        "player":"Maikel",
        "comment":"",
        "points":5,
        "__v":0
      },
      {
        "_id":"5ab24bfab8494c76fd0bb31c",
        "player":"Iebele",
        "comment":"",
        "points":4,
        "__v":0
      },
      {
        "_id":"5ab24bfeb8494c76fd0bb31d",
        "player":"Bettina",
        "comment":"",
        "points":3,
        "__v":0
      },
      {
        "_id":"5ab24c01b8494c76fd0bb31e",
        "player":"Shirley",
        "comment":"",
        "points":2,
        "__v":0
      },
      {
        "_id":"5ab24c04b8494c76fd0bb31f",
        "player":"Suzanne",
        "comment":"",
        "points":1,
        "__v":0
      }
    ],
    "question":1,"__v":0
  },
  {
    "_id":"5ab24fa21e7caa1132720e7a",
    "player":"Maikel",
    "answers":
    [
      {
        "_id":"5ab24c04b8494c76fd0bb31f",
        "player":"Suzanne",
        "comment":"",
        "points":7,
        "__v":0
      },
      {
        "_id":"5ab24bfab8494c76fd0bb31c",
        "player":"Iebele",
        "comment":"",
        "points":6,
        "__v":0
      },
      {
        "_id":"5ab24bf3b8494c76fd0bb31a",
        "player":"André",
        "comment":"",
        "points":5,
        "__v":0
      },
      {
        "_id":"5ab24c01b8494c76fd0bb31e",
        "player":"Shirley",
        "comment":"",
        "points":4,
        "__v":0
      },
      {
        "_id":"5ab24bf7b8494c76fd0bb31b",
        "player":"Maikel",
        "comment":"",
        "points":3,
        "__v":0
      },
      {
        "_id":"5ab24bfeb8494c76fd0bb31d",
        "player":"Bettina",
        "comment":"",
        "points":2,
        "__v":0
      },
      {
        "_id":"5ab227cf07818240934b11a5",
        "player":"Peter",
        "comment":"",
        "points":1,
        "__v":0
      }
    ],
    "question":1,"__v":0
  }
]
我想根据这些数据得到每个球员的总分,但我似乎找不到一个代码来计算每个球员的分数

结果是: 彼得:14 安德烈:12 梅克尔:10 艾贝尔:8

关于如何实现这一点有什么想法吗

我已尝试使用以下代码获取要点:

var { data, players } = this.state;
var ArrLength = data.length;
console.log(data);
var j;
var x;
for (j = 0; j < ArrLength; j++) {
  let answer = data[j].answers;
  for (x = 0; x < answer.length; x++) {
    console.log(answer[`${x}`].points);
  }
}
var{data,players}=this.state;
var ArrLength=data.length;
控制台日志(数据);
var j;
var x;
对于(j=0;j

这至少可以在console.log中显示每个玩家的点数。但是现在添加它们以获得最终结果似乎是我无法理解的事情。

只需使用外部数组即可。它基本上对
中的每个元素使用相同的键,它验证键是否已设置(如果未设置,则设置为零),并对与相同键相关的点求和

PS:
\u id
在json中不是唯一的

由于您提供的JSON无效,我将使用以下JSON:

var arr = [
    {
        answers: [{
                _id: "5ab227cf07818240934b11a5", 
                player: "Peter", 
                comment: "", 
                points: 7, 
                __v: 0
            }, {
                _id: "5ab24bf3b8494c76fd0bb31a", 
                player: "André", 
                comment: "", 
                points: 6, 
                __v: 0
            }, {
                _id: "5ab24bf7b8494c76fd0bb31b", 
                player: "Maikel", 
                comment: "", 
                points: 5, 
                __v: 0
            }, {
                _id: "5ab24bfab8494c76fd0bb31c", 
                player: "Iebele", 
                comment: "", 
                points: 4, 
                __v: 0
            }
        ],
        player: "Pieter",
        question: 1,
        __v: 0,
        _id: "5ab24e5e49e0f20a06d73ab7"
    }, {
        answers: [{
                _id: "5ab227cf07818240935b11a5", 
                player: "Peter", 
                comment: "", 
                points: 7, 
                __v: 0
            }, {
                _id: "5ab24bf3b8494c76fd8bb31a", 
                player: "André", 
                comment: "", 
                points: 6, 
                __v: 0
            }, {
                _id: "5ab24bf7b8494c76fd2bb31b", 
                player: "Maikel", 
                comment: "", 
                points: 5, 
                __v: 0
            }, {
                _id: "5ab24bfab8494c76fd9bb31c", 
                player: "Iebele", 
                comment: "", 
                points: 4, 
                __v: 0
            }
        ],
        player: "Kareltje",
        question: 1,
        __v: 0,
        _id: "5ab24e5e49e0f20b86d73ab7"
    }
]

var points = {};
for (var i in arr) {
    for (var j in arr[i].answers) {
        if (!points[arr[i].answers[j].player]) {
            points[arr[i].answers[j].player] = 0;
        }
        points[arr[i].answers[j].player] += arr[i].answers[j].points;
    }
}

您只需使用外部阵列即可完成此操作。它基本上对
中的每个元素使用相同的键,它验证键是否已设置(如果未设置,则设置为零),并对与相同键相关的点求和

PS:
\u id
在json中不是唯一的

由于您提供的JSON无效,我将使用以下JSON:

var arr = [
    {
        answers: [{
                _id: "5ab227cf07818240934b11a5", 
                player: "Peter", 
                comment: "", 
                points: 7, 
                __v: 0
            }, {
                _id: "5ab24bf3b8494c76fd0bb31a", 
                player: "André", 
                comment: "", 
                points: 6, 
                __v: 0
            }, {
                _id: "5ab24bf7b8494c76fd0bb31b", 
                player: "Maikel", 
                comment: "", 
                points: 5, 
                __v: 0
            }, {
                _id: "5ab24bfab8494c76fd0bb31c", 
                player: "Iebele", 
                comment: "", 
                points: 4, 
                __v: 0
            }
        ],
        player: "Pieter",
        question: 1,
        __v: 0,
        _id: "5ab24e5e49e0f20a06d73ab7"
    }, {
        answers: [{
                _id: "5ab227cf07818240935b11a5", 
                player: "Peter", 
                comment: "", 
                points: 7, 
                __v: 0
            }, {
                _id: "5ab24bf3b8494c76fd8bb31a", 
                player: "André", 
                comment: "", 
                points: 6, 
                __v: 0
            }, {
                _id: "5ab24bf7b8494c76fd2bb31b", 
                player: "Maikel", 
                comment: "", 
                points: 5, 
                __v: 0
            }, {
                _id: "5ab24bfab8494c76fd9bb31c", 
                player: "Iebele", 
                comment: "", 
                points: 4, 
                __v: 0
            }
        ],
        player: "Kareltje",
        question: 1,
        __v: 0,
        _id: "5ab24e5e49e0f20b86d73ab7"
    }
]

var points = {};
for (var i in arr) {
    for (var j in arr[i].answers) {
        if (!points[arr[i].answers[j].player]) {
            points[arr[i].answers[j].player] = 0;
        }
        points[arr[i].answers[j].player] += arr[i].answers[j].points;
    }
}
您可以使用数组进行计数,并使用数据构建一个数组

var data=[{答案:[{id:“5ab227cf07818240934b11a5”,玩家:“彼得”,评论:“,点数:7,{U v:0},{id:“5ab24bf3b8494c76fd0bb31a”,玩家:“安德烈”,评论:”,点数:6,{id:“5ab24bf7b8494c76fd0bb31b”,玩家:“梅克尔”,评论:“,点数:5,{U id:“5ab24bf7b8494c76fd0bb31b”,玩家:“贝勒”,评论:{注:“,分数:4,”,玩家:“彼得”,问题:1,“,id:”5ab24e5e49e0f20a06d73ab7“,{答案:“{id:”5ab227cf07818240935b11a5“,玩家:“彼得”,评论:“,分数:7,”,id:“5ab24bf3b8494c76fd8bb31a”,玩家:“安德烈”,评论:“,分数:6,”,id:“彼得”,评论:“,分数:7,”,玩家:“AB24BF3B94C768BB31A”,MAIb:“MAI7B847B”注释:“,点数:5,{u id:“5ab24bfab8494c76fd9bb31c”,玩家:“Iebele”,注释:“,点数:4,{u v:0}],玩家:“Kareltje”,问题:1,{u v:0,{u id:“5ab24e5e49e0f20b86d73ab7”},
score=Array.from(
data.reduce((m,{answers})=>
减少((n,{玩家,点数})=>
n、 设置(玩家,(n.获得(玩家)| | 0)+点数),m),新地图),
([player,score])=>({player,score})
);
控制台日志(score)
。作为控制台包装器{max height:100%!important;top:0;}
您可以使用用于计数并使用数据构建数组

var data=[{答案:[{id:“5ab227cf07818240934b11a5”,玩家:“彼得”,评论:“,点数:7,{U v:0},{id:“5ab24bf3b8494c76fd0bb31a”,玩家:“安德烈”,评论:”,点数:6,{id:“5ab24bf7b8494c76fd0bb31b”,玩家:“梅克尔”,评论:“,点数:5,{U id:“5ab24bf7b8494c76fd0bb31b”,玩家:“贝勒”,评论:{注:“,分数:4,”,玩家:“彼得”,问题:1,“,id:”5ab24e5e49e0f20a06d73ab7“,{答案:“{id:”5ab227cf07818240935b11a5“,玩家:“彼得”,评论:“,分数:7,”,id:“5ab24bf3b8494c76fd8bb31a”,玩家:“安德烈”,评论:“,分数:6,”,id:“彼得”,评论:“,分数:7,”,玩家:“AB24BF3B94C768BB31A”,MAIb:“MAI7B847B”注释:“,点数:5,{u id:“5ab24bfab8494c76fd9bb31c”,玩家:“Iebele”,注释:“,点数:4,{u v:0}],玩家:“Kareltje”,问题:1,{u v:0,{u id:“5ab24e5e49e0f20b86d73ab7”},
score=Array.from(
data.reduce((m,{answers})=>
减少((n,{玩家,点数})=>
n、 设置(玩家,(n.获得(玩家)| | 0)+点数),m),新地图),
([player,score])=>({player,score})
);
控制台日志(score)

。作为控制台包装{max height:100%!important;top:0;}
您可以使用此选项

使用函数
reduce
和函数
forEach

  • 减少
    以累积
  • forEach
    循环回答
var data=[{答案:[{u id:“5ab227cf07818240934b11a5”,玩家:“彼得”,评论:,点数:7,{u v:0},{u id:“5ab24bf3b8494c76fd0bb31a”,玩家:“安德烈”,评论:“,点数:6,{u-id:“5ab24bf7b8494c76fd0bb31b”,玩家:“Maikel”,注释:,点数:5,{u-v:0},{u-id:“5ab24bfab8494c76fd0bb31c”,玩家:“Iebele”,注释:“,分数:4,{u v:0}],玩家:“皮特”,问题:1,{u v:0,{u id:“5ab24e5e49e0f20a06d73ab7},{答案:{{{u id:“5ab227cf07818240935b15a5”,玩家:“彼得”,评论:,分数:7,{u v:0},{u id:“5ab24bf3b8494c76fd8bb31a”,玩家:“安德烈”,评论:,点数:6,{u v:0},{u id:“5ab24bf7b8494c76fd2bb31b”,玩家:“梅克尔”,评论:,点数:5,{u v:0},{u id:“5ab24bfab8494c76fd9bb31c,玩家:“伊贝勒”,评论:,分数:4,_v:0}],玩家:“卡莱尔杰”,问题: