Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.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
从JSON获取最大值并显示相关数据(API/Javascript)_Javascript_Loops_Object_For Loop_Max - Fatal编程技术网

从JSON获取最大值并显示相关数据(API/Javascript)

从JSON获取最大值并显示相关数据(API/Javascript),javascript,loops,object,for-loop,max,Javascript,Loops,Object,For Loop,Max,我正在使用一个API来显示足球运动员的统计数据,使用Javascript,我目前有一个“for循环”,它遍历所有球员并将他们显示在一个表中 我现在要做的是找到并展示那些拥有顶级数据的球员——顶级得分手/最不失球/最红牌等等。我该怎么做呢 以下是API中的相关JSON数据示例: { "elements": [ { "first_name": "Petr", "second_name": "Cech", "

我正在使用一个API来显示足球运动员的统计数据,使用Javascript,我目前有一个“for循环”,它遍历所有球员并将他们显示在一个表中

我现在要做的是找到并展示那些拥有顶级数据的球员——顶级得分手/最不失球/最红牌等等。我该怎么做呢

以下是API中的相关JSON数据示例:

{
   "elements": [
        {
            "first_name": "Petr",
            "second_name": "Cech",
            "minutes": 585,
            "goals_scored": 0,
            "assists": 0,
            "clean_sheets": 1,
        },
        {
            "first_name": "Bernd",
            "second_name": "Leno",
            "minutes": 135,
            "goals_scored": 0,
            "assists": 0,
            "clean_sheets": 0,
        },
        {
            "first_name": "Mesut",
            "second_name": "Özil",
            "minutes": 510,
            "goals_scored": 2,
            "assists": 0,
            "clean_sheets": 2,
        },
        *(and on and on...)*
]}
这里面大约有500个玩家,所以我需要有一些东西来检查所有玩家,并计算出每个属性名中哪些玩家的值最高

我怎样才能得到它,这样我就可以(例如)展示最佳射手、他们的进球和名字。 我不确定这样做的正确方法是什么,是否要再次进行for循环,并以某种方式使用math.max做一些事情


谢谢

您可以对数组进行排序,并在排序过程之后获得第一个元素

var object={“elements”:[{“first_name”:“Petr”,“second_name”:“Cech”,“minutes”:585,“goals_scored”:0,“assists”:0,“clean_sheets”:1,},{“first_name”:“Bernd”,“second_name”:“Leno”,“minutes”:135,“goals_scored”:0,“assists”:0,“clean_sheets”:0,},{“第一名”:“梅苏特”,“第二名”:“Özil”,“分钟数”:510,“进球数”:2,“助攻数”:0,“清洁床单”:2,}]},
查找=(arr,key)=>{
让排序=arr.slice().sort((a,b)=>{
如果(a的类型=='string'){
返回b[key].localeCompare(a[key]);
}
返回b[key]-a[key];
});
返回排序[0];
}
console.log(查找(object.elements,'goals_scored');

.as console wrapper{max height:100%!important;top:0;}
您可以对数组进行排序,并在排序过程后获取第一个元素

var object={“elements”:[{“first_name”:“Petr”,“second_name”:“Cech”,“minutes”:585,“goals_scored”:0,“assists”:0,“clean_sheets”:1,},{“first_name”:“Bernd”,“second_name”:“Leno”,“minutes”:135,“goals_scored”:0,“assists”:0,“clean_sheets”:0,},{“第一名”:“梅苏特”,“第二名”:“Özil”,“分钟数”:510,“进球数”:2,“助攻数”:0,“清洁床单”:2,}]},
查找=(arr,key)=>{
让排序=arr.slice().sort((a,b)=>{
如果(a的类型=='string'){
返回b[key].localeCompare(a[key]);
}
返回b[key]-a[key];
});
返回排序[0];
}
console.log(查找(object.elements,'goals_scored');

.as console wrapper{max height:100%!important;top:0;}
这将仅在数组上循环一次,并一次性检索所有统计信息:

const输入={
“要素”:[{
“名字”:“彼得”,
“第二个名字”:“切赫”,
“分钟”:585,
“得分”:0,
“助攻”:0,
“清洁床单”:1,
},
{
“名字”:“伯纳德”,
“第二个名字”:“雷诺”,
“分钟”:135,
“得分”:0,
“助攻”:0,
“清洁工作表”:0,
},
{
“名字”:“梅苏特”,
“第二个名字”:“Özil”,
“分钟”:510,
“进球数”:2,
“助攻”:0,
“清洁床单”:2,
}
]
};
const stats=input.elements.reduce((stats,player)=>{
[‘分钟’、‘进球’、‘助攻’、‘清洁床单’]。forEach(关键=>{
如果(玩家[key]>stats[key].max){
统计数据[key].max=player[key];
统计数据[key].bestPlayer=player;
}
});
返回统计;
}, {
分钟数:{max:0,bestPlayer:null},
得分:{max:0,bestPlayer:null},
助攻:{max:0,bestPlayer:null},
清理工作表:{max:0,bestPlayer:null}
});
console.log('minutes',stats.minutes);
console.log('goals\u scored',stats.goals\u scored');
console.log('assists',stats.assists);

console.log('clean_sheets',stats.clean_sheets);
这将仅在阵列上循环一次并一次性检索所有统计信息:

const输入={
“要素”:[{
“名字”:“彼得”,
“第二个名字”:“切赫”,
“分钟”:585,
“得分”:0,
“助攻”:0,
“清洁床单”:1,
},
{
“名字”:“伯纳德”,
“第二个名字”:“雷诺”,
“分钟”:135,
“得分”:0,
“助攻”:0,
“清洁工作表”:0,
},
{
“名字”:“梅苏特”,
“第二个名字”:“Özil”,
“分钟”:510,
“进球数”:2,
“助攻”:0,
“清洁床单”:2,
}
]
};
const stats=input.elements.reduce((stats,player)=>{
[‘分钟’、‘进球’、‘助攻’、‘清洁床单’]。forEach(关键=>{
如果(玩家[key]>stats[key].max){
统计数据[key].max=player[key];
统计数据[key].bestPlayer=player;
}
});
返回统计;
}, {
分钟数:{max:0,bestPlayer:null},
得分:{max:0,bestPlayer:null},
助攻:{max:0,bestPlayer:null},
清理工作表:{max:0,bestPlayer:null}
});
console.log('minutes',stats.minutes);
console.log('goals\u scored',stats.goals\u scored');
console.log('assists',stats.assists);
console.log('clean_sheets',stats.clean_sheets);
函数findMostPlayerByField(arr,fieldName,alt){
返回arr.reduce((prevEl,el)=>{
如果(!prevEl[fieldName]){
返回el;
}else if(alt){
返回编号(prevEl[fieldName])>编号(el[fieldName])?el:prevEl;
}否则{
返回编号(prevEl[fieldName])<编号(el[fieldName])?el:prevEl;
}
}, {});
}
用法示例:

findMostPlayerByField(元素,“分钟”);//Petr Chech对象
findMostPlayerByField(元素,“分钟”,true);//Bernd Leno对象

函数findMostPlayerByField(arr,fieldName,alt){
返回arr.reduce((前置,前置)=
function findMostPlayerByField(arr, fieldName, alt) {
    return arr.reduce((prevEl, el) => {
        if (!prevEl[fieldName]) {
            return el;
        } else if (alt) {
            return Number(prevEl[fieldName]) > Number(el[fieldName])? el: prevEl;
        } else {
            return Number(prevEl[fieldName]) < Number(el[fieldName])? el: prevEl;
        }
    }, {});
}
const stats = {
"elements": [
     {
         "first_name": "Petr",
         "second_name": "Cech",
         "minutes": 585,
         "goals_scored": 0,
         "assists": 0,
         "clean_sheets": 1,
     },
     {
         "first_name": "Bernd",
         "second_name": "Leno",
         "minutes": 135,
         "goals_scored": 0,
         "assists": 0,
         "clean_sheets": 0,
     },
     {
         "first_name": "Mesut",
         "second_name": "Özil",
         "minutes": 510,
         "goals_scored": 2,
         "assists": 0,
         "clean_sheets": 2,
     },
]};

// for referring to highest in each category
// initially, the first stat is the highest 
let highest = {
 'highestGoals': stats.elements[0],
 'highestAssists': stats.elements[0],
 'highestCleanSheets': stats.elements[0]
}; 

for(let i=1; i<stats.elements.length; ++i) {
   let s = stats.elements[i];
   if(highest['highestGoals'].goals_scored < s.goals_scored) {
     highest['highestGoals'] = s; // this is the new highest scorer
   }
   if(highest['highestAssists'].assists < s.assists) {
     highest['highestAssists'] = s; // this is the new highest assists
   }
   if(highest['highestCleanSheets'].clean_sheets < s.clean_sheets) {
     highest['highestCleanSheets'] = s; // this is the highest clean sheets
   }
}

console.log(`Highest goal scorer: ${highest['highestGoals'].first_name + ' ' + highest['highestGoals'].second_name}`);
console.log(`Highest Assists: ${highest['highestAssists'].first_name + ' ' + highest['highestAssists'].second_name}`);
console.log(`Highest Clean Sheet: ${highest['highestCleanSheets'].first_name + ' ' + highest['highestCleanSheets'].second_name}`);