我正在尝试获取对象中所有wins属性的最大值。以下是该对象的简短示例,我正在尝试获取wins属性的最大值,即11。
var coach_wins = {
"player1": [
{
year: 2015,
wins: 6
},
{
year: 2016,
wins: 6
}
],
"player2": [
{
year: 2015,
wins: 11
},
{
year: 2016,
wins: 6
}
]
};目前我正在计算对象的长度,然后使用for循环遍历对象并获得键:
coach_wins[Object.keys(coach_wins)[i]];然后再次执行此操作,并存储每个wins值的值;
有没有更有效的方法?
谢谢。
发布于 2017-08-03 14:26:39
var coach_wins = {
"player1": [
{
year: 2015,
wins: 6
},
{
year: 2016,
wins: 6
}
],
"player2": [
{
year: 2015,
wins: 11
},
{
year: 2016,
wins: 6
}
]
};
var max = Object.values(coach_wins) //get all the values of the object
.reduce(function(largest, player){ //reduce the max for all player
return player.reduce(function(largest, record){ //reduce the max for each player
return (largest > record.wins ? largest : record.wins);
}, largest);
}, 0);
console.log(max);
发布于 2017-08-03 14:26:26
这个怎么样?
Object.values(coach_wins).reduce(
(result, player) => Math.max(result, player.reduce(
(wins, winsPerYear) => Math.max(wins, winsPerYear.wins)
, 0))
, 0); // --> 11发布于 2017-08-03 14:28:12
如果player的各个数组总是包含2,我想这很好,但是如果它可以改变,你可以这样做。一小段代码,但不会把你放在异常中
function getMaxWins(){
var maxWins = 0;
for (var curPlayer in coach_wins) {
//checking whether is it contains records
var playerRecords = coach_wins[curPlayer];
if(playerRecords){
playerRecords.forEach(function (playerRecord_) {
if(maxWins < playerRecord_.wins) maxWins = playerRecord_.wins;
});
}
}
return maxWins;
}
console.log(getMaxWins());https://stackoverflow.com/questions/45476093
复制相似问题