使用javascript从数组中提取数据

使用javascript从数组中提取数据,javascript,arrays,google-chrome,google-chrome-extension,Javascript,Arrays,Google Chrome,Google Chrome Extension,我正在创建一个GoogleChrome扩展,它将使用存储在JSON文件中的一些数据。我需要组成一个由11名成员组成的团队,需要从处理过的JSON文件中提取出来,但我不知道如何继续。解析完文件后,我希望每个团队位置只有x个团队成员。例如,我需要随机选择一名门将、三名、四名或五名后卫、三名四名或五名中场以及一名、两名或三名前锋。使用PHP我可以毫无问题地做到这一点,但我对javascript不是很有经验,我需要帮助。是否有任何功能或方法来实现这一点 JSON JS reduce、map和filter

我正在创建一个GoogleChrome扩展,它将使用存储在
JSON
文件中的一些数据。我需要组成一个由11名成员组成的团队,需要从处理过的
JSON
文件中提取出来,但我不知道如何继续。解析完文件后,我希望每个团队位置只有x个团队成员。例如,我需要随机选择一名门将、三名、四名或五名后卫、三名四名或五名中场以及一名、两名或三名前锋。使用
PHP
我可以毫无问题地做到这一点,但我对javascript不是很有经验,我需要帮助。是否有任何功能或方法来实现这一点

JSON JS
reduce
map
filter
的组合可用于设置团队:

const玩家=[
{
“玩家id”:3,
“玩家姓氏”:“不动”,
“玩家姓名”:“西罗”,
“玩家编号”:17,
“球队名称”:“拉齐奥”,
“team_缩写”:“LAZ”,
“role_缩写”:“A”,
“角色名称”:“附件”,
“引文”:62,
},
{
“玩家id”:3,
“玩家姓氏”:“不动”,
“玩家姓名”:“西罗”,
“玩家编号”:17,
“球队名称”:“拉齐奥”,
“team_缩写”:“BLAA”,
“role_缩写”:“A”,
“角色名称”:“附件”,
“引文”:62,
}
];
const playersPerTeam=Object.values(players.reduce)(acc,player)=>{
const teamKey=player.team_缩写;
如果(!acc.hasOwnProperty(teamKey)){
acc[团队钥匙]=[];
}
acc[团队钥匙]。推送(球员);
返回acc;
}, {}));
const chosenSetupPerTeam=playersPerTeam.map(playersInTeam=>{
const Players NeededPerrole={
“Portiere”:1,//看守人
“迪芬索尔”:4,//后卫
“中央奥林匹克运动会”:4,//中场
“攻击者”:2,//攻击者
};
const playersPresentPerRole={};
//让一个团队满足PlayerNeedPerrole中规定的要求
return playerInteam.filter(播放器=>{
//角色不存在,因此玩家不能加入团队
如果(!playerNeedPerrole.hasOwnProperty(player.role_name)){
返回false;
}
//将每个角色出现的玩家的默认值设置为0
如果(!playerPresentPerRole.hasOwnProperty(player.role\u name)){
PlayerPresentPerrole[player.role\u name]=0;
}
//如果已按照PlayerNeedPerrole中的规定填充所有位置,则停止
if(playerPresentPerrole[player.role\u name]==playerNeedPerrole[player.role\u name]){
返回false;
}
PlayerPresentPerrole[player.role_name]++;
返回true;
});
});

log(chosenSetupPerTeam)
您能在问题中添加一个JSON对象的示例吗?通过这种方式,我们可以帮助检索各种数据。@MaartenDev我已经用JSON文件中单个玩家的表示更新了这个问题。它包含了意大利甲级联赛的所有球员,总共588名参赛者。你也可以发布你的php代码,有人会告诉你,同样的方法是否适用JavaScript@IvánNokonoko我没有为这个项目编写
PHP
代码,因为它是chome扩展,所以与JS不同,这是浪费时间,phpI将在我的IDE中尝试您的代码。你能详细解释一下它将做什么以及如何做吗?我在代码中看到了注释,但从演示中不清楚发生了什么。首先,它将所有玩家按其团队分组,这样我们就知道哪些玩家可以相互玩。然后我们在所有球队中循环,找到11名可能的球员。为了找到11名可能的球员,我们对团队中的所有球员进行了循环。对于每个玩家,我们检查他们的角色
role\u name
是否需要在设置中(
playersneedperrole
)并且尚未完成(
playersPresentPerRole
)。如果给球员留有空间,球员就留在队里,否则就被排除在外。使用
.filter
过滤播放器,如果回调返回true,则播放器将保留@jihuuNIThe
console.log
输出每个团队选择的11名球员。您可以将此代码与
getJson
调用相结合,并为每个团队选择11名玩家@jihuuNIOk谢谢你的解释。你向我建议的方法是完美的,但是如果我想让玩家独立于他们的Appartence团队并创建一个团队,有可能通过一些代码修改吗?是的,我正在考虑使用
Math.random()
在玩家被显形团队划分之后,然后为每个玩家设置一个随机索引值。我将尝试在您提供的@MaartenDev代码中实现这一点
{
"player_id":3,
"player_surname":"Immobile",
"player_name":"Ciro",
"player_number":17,
"team_name":"Lazio",
"team_abbreviation":"LAZ",
"role_abbreviation":"A",
"role_name":"Attaccante",
"quotation":62,
}
const uri = 'api/players_.json';
$.getJSON(uri, function(data){
 // code stuff here
});