Я пытаюсь создать функцию JavaScript, которая получает информацию из массива во внешнем JSON, а затем принимает максимальное значение (или 5 лучших значений) для одной из переменных JSON. Для этого примера, скажем, я хочу получить максимальное значение для значения «ppg». Вот небольшой образец массива:

[ { "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" } ] 

Каков наилучший способ пройти через массив, чтобы получить максимальное значение, а затем получить значения «игрок» и «команда» из этого значения? Страница будет интерактивной, так как у меня будет выпадающая строка меню, позволяющая зрителю выбирать между одним из шести значений JSON, кроме «player» и «team». Заранее спасибо!

Просто прокрутите массив и следите за максимумом по ходу:

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

Использование как:

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

Скрипка демо

редактировать

Вы также можете использовать метод сортировки Javascript, чтобы получить верхние n значений:

 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]) {amp}lt; parseInt(y[prop])) return 1; else return -1; }); return clone.slice(0, n || 1); } 

Использование:

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

Скрипка демо

Я нашел следующий подход очень аккуратным:

 arr.sort( function(a, b) { return parseFloat(b['ppg']) - parseFloat(a['ppg']); } )[0]['player'] 

Демо в фрагменте:

 var arr =[ { "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" } ] console.log( arr.sort( function(a, b) { return parseFloat(b['ppg']) - parseFloat(a['ppg']); } )[0]['player'] ); 

Сначала я сортирую массив в порядке убывания, затем выбираю первый элемент, который содержит максимальное значение. В коде я нашел player с максимальным значением ppg . Надеюсь это поможет!

 function getMaxOfJson(jsonalreadyparsed, property) { var max = null; for (var i=0 ; i{amp}lt;jsonalreadyparsed.length ; i  ) { if(max == null){ max = jsonalreadyparsed[i][property]; } else { if (parseFloat(jsonalreadyparsed[i][property]) {amp}gt; max){ max = jsonalreadyparsed[i][property]; } } } return max; } 

Это работает для меня.

Вы можете найти эту функцию sortByAttribute полезной. Просто передайте атрибут по строке, по которой вы хотите его отсортировать, и он вернет любой объект, имеющий максимальное значение для определенного атрибута, который вы ищете. Он по-прежнему будет возвращать весь массив, отсортированный по возрастанию по указанному вами свойству.

 var myArr = [ { "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" } ] function sortByAttribue(arr, attribute) { return arr.sort(function(a,b) { return a[attribute] {amp}lt; b[attribute]; }); } sortByAttribue(myArr, "3pg") // returns Carmelo Anthony first sortByAttribue(myArr, "bpg") // returns Anthony Davis first 

Это должно работать:

 var highestValue = 0; //keep track of highest value //loop through array of objects for (var i=0, len = ary.length; i{amp}lt;len; i  ) { var value = Number(ary[i]["ppg"]); if (value {amp}gt; highestValue) { highestValue = value; } } 

функция, которая ищет элемент с определенным свойством max максимум:

 function getMax(array, propName) { var max = 0; var maxItem = null; for(var i=0; i{amp}lt;array.length; i  ) { var item = array[i]; if(item[propName] {amp}gt; max) { max = item[propName]; maxItem = item; } } return maxItem; } 

использование:

 $(document).ready(function() { $('#getMaxBtn').click(function() { var max = getMax(jsonArray, 'ppg'); alert(max.player); }); }); 

Это позволит вам выбрать, какую статистику вы хотите и какую информацию вы хотите вернуть.

http://jsbin.com/tudegofa/1/edit

data ={amp}gt; это массив

stat ={amp}gt; это статистика, которую вы хотите отсортировать по

info ={amp}gt; — это массив свойств, которые вы хотите вернуть.

 function getValues (data, stat, info) { var selectedValues = data.map(function(x) { return parseFloat(x[stat]); }) var i = selectedValues.indexOf(Math.max.apply(Math, selectedValues)); var result = {}; info.forEach(function(x) { result[x] = test[i][x]; }) return result; } var myData = ''; $.getJSON('/url/to/grab/json', function(data) { myData = data; }); getValues(myData, "bpg", ["player","team"]); //[object Object] { // player: "Anthony Davis", // team: "New Orleans Pelicans" // } 

Простота, спасибо вам в долгосрочной перспективе.

 function getMaxValueByAttribute(arr, attr) { var max = "-99999999999"; arr.forEach(function (member, index) { // console.log(member, index); if (member.hasOwnProperty(attr) {amp}amp;{amp}amp; parseFloat(member[attr]) {amp}gt; parseFloat(max)) { max = member[attr]; // console.log("Max now: "   max); } }); return max; } 

Тогда используйте это как:

 var result = getMaxValueByAttribute(arr, "ppg"); // result = "27.4" 

Вы можете сделать это с помощью lodash так легко.

 var players = [{ "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" } ]; var topscorer = _ .chain(players) .sortBy('ppg') .reverse() .map(function(o) { return 'Top scorer: '   o.player   ' - '   o.team; }) .head() .value(); console.log(topscorer); 
 {amp}lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.min.js"{amp}gt;{amp}lt;/script{amp}gt; 

Или даже короче

 var players = [{ "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" } ]; console.log(_.maxBy(players, 'ppg').player); 
 {amp}lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"{amp}gt;{amp}lt;/script{amp}gt;