У меня есть объект, например, так:Получить наибольшее значение в объекте
var lookup = {
42: "42",
43: "43"
}
Как я могу получить максимальное значение в этом объекте? Я ожидаю получить 43
, потому что это самый высокий номер.
У меня есть объект, например, так:Получить наибольшее значение в объекте
var lookup = {
42: "42",
43: "43"
}
Как я могу получить максимальное значение в этом объекте? Я ожидаю получить 43
, потому что это самый высокий номер.
Как видно из комментариев, ваш вопрос немного расплывчатый. Если вы хотите, чтобы сравнить значение строк анализируемое как Интс, должны работать на основе структуры объекта:
var myArray = Object.keys(lookup).map(function(current){
return parseInt(current)
});
var max = Math.max.apply(null, myArray)
Это не работает, если ваш объект содержит нечисловые значения. ParseInt вернет NaN по нечисловым значениям, а Math.max.apply вернет NaN, если массив содержит NaN. –
Попробуйте эту функцию:
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;
}
Это будет цикл через объект и получить все свойства, установленные на этом объекте (не в цепочке прототипов), попытаться преобразовать их в числа, а затем вернуть макс. Обратите внимание, что это не возвращает ключ, а значение.
Вы можете удалить проверку 'hasOwnProperty()', если вы используете 'Object.keys', сохраните некоторую типизацию :) –
Хорошая точка @MisterEpic! По-прежнему существует проблема совместимости с Object.keys, если вам необходимо поддерживать браузеры старше IE9. Ознакомьтесь со статьей https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys для получения полной информации об объектах. –
Ради иметь разнообразие ответов, вот более функциональная реализация с использованием lodash-х reduce
и тройной оператор:
_.reduce(_.values(lookup), function(max, n){ return n > max ? n : max; });
1) Что вы пытаетесь? 2) Вы сравниваете имена свойств или значения? 3) Если это значения, вы ожидаете, что строки будут преобразованы в целые числа, а затем сравнены? 4) Можете ли вы использовать массив вместо объекта? –