Thursday, May 23, 2024
 Popular · Latest · Hot · Upcoming
117
rated 0 times [  118] [ 1]  / answers: 1 / hits: 80691  / 10 Years ago, tue, april 8, 2014, 12:00:00

I'm trying to create a JavaScript function which takes information from an array in an external JSON and then takes the max value (or the top 5 values) for one of the JSON variables. For this example, let's say I want to get the max value for the value ppg. Here is a small sample of the array:



[
{
player : Andre Drummond,
team : Detroit Pistons,
ppg : 15.4,
rpg : 11.6,
apg : 2.4,
bpg : 1.6,
spg : 0.8,
3pg : 0.1
},
{
player : Anthony Davis,
team : New Orleans Pelicans,
ppg : 16.4,
rpg : 13.6,
apg : 2.6,
bpg : 3.5,
spg : 1.2,
3pg : 0.1
},
{
player : Carmelo Anthony,
team : New York Knicks,
ppg : 27.4,
rpg : 5.4,
apg : 4.5,
bpg : 1.1,
spg : 1.5,
3pg : 1.6
}
]


What would be the best way to go through the array to get the max value and then get the values player and team from this value? The page will be interactive, as I will have a drop-down menu bar with allows the viewer to choose between one of the six JSON values aside from player and team. Thanks in advance!


More From » jquery

 Answers
19

Just cycle through the array, and keep track of the max as you go:



function getMax(arr, prop) {
var max;
for (var i=0 ; i<arr.length ; i++) {
if (max == null || parseInt(arr[i][prop]) > parseInt(max[prop]))
max = arr[i];
}
return max;
}


Usage is like:



var maxPpg = getMax(arr, ppg);
console.log(maxPpg.player + - + maxPpg.team);


Fiddle demo



Edit



You can also use the Javascript sort method to get the top n values:



function getTopN(arr, prop, n) {
// clone before sorting, to preserve the original array
var clone = arr.slice(0);

// sort descending
clone.sort(function(x, y) {
if (x[prop] == y[prop]) return 0;
else if (parseInt(x[prop]) < parseInt(y[prop])) return 1;
else return -1;
});

return clone.slice(0, n || 1);
}


Usage:



var topScorers = getTopN(arr, ppg, 2);
topScorers.forEach(function(item, index) {
console.log(# + (index+1) + : + item.player);
});


Fiddle demo


[#71557] Monday, April 7, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
madalyngriseldas

Total Points: 167
Total Questions: 92
Total Answers: 85

Location: Iceland
Member since Sat, Sep 17, 2022
2 Years ago
;