Подтвердить что ты не робот

Получение ключа с наивысшим значением объекта

У меня есть такой объект:

Object {a: 1, b: 2, undefined: 1} 

Как быстро вытащить из него самый большой идентификатор значения (здесь: b)? Я попытался преобразовать его в массив и затем отсортировать, но он не сработал, поскольку он отсортирован в алфавитном порядке (и кажется, что он перегружает данные взад и вперед только для того, чтобы получить одно значение из трех).

4b9b3361

Ответ 1

Например:

var obj = {a: 1, b: 2, undefined: 1};

Object.keys(obj).reduce(function(a, b){ return obj[a] > obj[b] ? a : b });

В ES6:

var obj = {a: 1, b: 2, undefined: 1};

Object.keys(obj).reduce((a, b) => obj[a] > obj[b] ? a : b);

Ответ 2

Использование Underscore или Lo-Dash:

var maxKey = _.max(Object.keys(obj), function (o) { return obj[o]; });

с функциями стрелки ES6:

var maxKey = _.max(Object.keys(obj), o => obj[o]);

jsFiddle demo

Ответ 3

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

    const getMax = object => {
        return Object.keys(object).filter(x => {
             return object[x] == Math.max.apply(null, 
             Object.values(object));
       });
    };

Это возвращает массив с ключами для всех из них с максимальным значением, если есть некоторые, которые имеют равные значения. Например: if

const obj = {яблоки: 1, бананы: 1, груши: 1}
 // Это вернет ['яблоки', 'бананы', 'груши']

Если, с другой стороны, существует максимум:

const obj = {яблоки: 1, бананы: 2, груши: 1};//Это вернет ['бананы']
--- > Чтобы получить строку из массива: ['bananas'] [0]//возвращает "bananas'`

Ответ 4

Предположим, что у вас есть Object:

var obj = {a: 1, b: 2, undefined: 1}

Вы можете сделать это

var max = Math.max.apply(null,Object.keys(obj).map(function(x){ return obj[x] }));
console.log(Object.keys(obj).filter(function(x){ return obj[x] == max; })[0]);

Ответ 5

Очень простой метод. может быть медленным для обработки

var v = {a: 1, b: 2, undefined: 1};

function geth(o){
    var vals = [];    
    for(var i in o){
       vals.push(o[i]);
    }

    var max = Math.max.apply(null, vals);

     for(var i in o){
        if(o[i] == max){
            return i;
        }
    }
}

console.log(geth(v));