2015-10-15 3 views
-1

У меня есть объект, например, так:Получить наибольшее значение в объекте

var lookup = { 
    42: "42", 
    43: "43" 
} 

Как я могу получить максимальное значение в этом объекте? Я ожидаю получить 43, потому что это самый высокий номер.

+7

1) Что вы пытаетесь? 2) Вы сравниваете имена свойств или значения? 3) Если это значения, вы ожидаете, что строки будут преобразованы в целые числа, а затем сравнены? 4) Можете ли вы использовать массив вместо объекта? –

ответ

2

Как видно из комментариев, ваш вопрос немного расплывчатый. Если вы хотите, чтобы сравнить значение строк анализируемое как Интс, должны работать на основе структуры объекта:

var myArray = Object.keys(lookup).map(function(current){ 
    return parseInt(current) 
}); 
var max = Math.max.apply(null, myArray) 
+0

Это не работает, если ваш объект содержит нечисловые значения. ParseInt вернет NaN по нечисловым значениям, а Math.max.apply вернет NaN, если массив содержит NaN. –

1

Попробуйте эту функцию:

function getMax(dataObj){ 
var max; 
for(var key in dataObj){ 
    if (dataObj.hasOwnProperty(key)) { 
     var number = parseFloat(dataObj[key]); 
     //max by default is undefined and number could be NaN 
     if(!max && number){ 
      max = number; 
     } 
     else if(number > max){ 
      max = number; 
     } 
    } 
} 
return max; 
} 

Это будет цикл через объект и получить все свойства, установленные на этом объекте (не в цепочке прототипов), попытаться преобразовать их в числа, а затем вернуть макс. Обратите внимание, что это не возвращает ключ, а значение.

+0

Вы можете удалить проверку 'hasOwnProperty()', если вы используете 'Object.keys', сохраните некоторую типизацию :) –

+0

Хорошая точка @MisterEpic! По-прежнему существует проблема совместимости с Object.keys, если вам необходимо поддерживать браузеры старше IE9. Ознакомьтесь со статьей https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys для получения полной информации об объектах. –

0

Ради иметь разнообразие ответов, вот более функциональная реализация с использованием lodash-х reduce и тройной оператор:

_.reduce(_.values(lookup), function(max, n){ return n > max ? n : max; }); 
Смежные вопросы