Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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 如何按键对JSON数组进行分组?_Javascript_Jquery_Json - Fatal编程技术网

Javascript 如何按键对JSON数组进行分组?

Javascript 如何按键对JSON数组进行分组?,javascript,jquery,json,Javascript,Jquery,Json,我有一组保存游戏数据的对象。数组中的每个对象都有日期、位置、游戏类型、赢家和输家 我希望我的输出是一个具有player、wins和loss属性的对象数组(即,输出将按player分组,而数组输入中的每个对象都有一个winner player和一个loss player)。输出将告诉我,在所有玩过的游戏中,每个玩家有多少赢家和输家。我假设您的游戏数据结构如下所示 const gameData = [{ date: '12/02/2018', location: 'Germany', g

我有一组保存游戏数据的对象。数组中的每个对象都有日期、位置、游戏类型、赢家和输家


我希望我的输出是一个具有player、wins和loss属性的对象数组(即,输出将按player分组,而数组输入中的每个对象都有一个winner player和一个loss player)。输出将告诉我,在所有玩过的游戏中,每个玩家有多少赢家和输家。

我假设您的游戏数据结构如下所示

const gameData = [{
  date: '12/02/2018',
  location: 'Germany',
  gameType: 'any',
  winner: 'Joe Smith',
  loser: 'Leo Messi',
}, {
  date: '20/02/2018',
  location: 'Australia',
  gameType: 'any',
  winner: 'Joe Smith',
  loser: 'Cristiano',
}, {
  date: '23/02/2018',
  location: 'England',
  gameType: 'any',
  winner: 'Alexi Sanchez',
  loser: 'Joe Smith',
}]
那么这就是可能的解决方案。
const gameData=[{
日期:2018年2月12日,
地点:'德国',
游戏类型:'任何',
获胜者:“乔·史密斯”,
失败者:“里奥·梅西”,
}, {
日期:2018年2月20日,
地点:'澳大利亚',
游戏类型:'任何',
获胜者:“乔·史密斯”,
失败者:“克里斯蒂亚诺”,
}, {
日期:2018年2月23日,
地点:'英格兰',
游戏类型:'任何',
获胜者:“亚历克西·桑切斯”,
失败者:“乔·史密斯”,
}]
const playerObjects=游戏数据。减少((acc,游戏)=>{
if(acc[游戏赢家]){
acc[game.winner]。wins=acc[game.winner]。wins+1 | 1;
}else acc[game.winner]={赢:1,输:0};
如果(acc[游戏输家]){
acc[game.loss].loss=acc[game.loss]['loss']+1 | | 1;
}else acc[游戏输家]={赢:0,输:1};
返回acc;
}, {});
const results=Object.keys(playerObject).reduce((arr,key)=>{
康斯特玩家={
姓名:key,,
wins:PlayerObject[key]。wins,
Loss:PlayerObject[key]。Loss,
};
arr.push(玩家);
返回arr;
}, []);

控制台日志(结果)共享对象和输出格式