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

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

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

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

62
задан 9 December 2014 в 13:35

5 ответов

Например:

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);
94
ответ дан 31 October 2019 в 13:41

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

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

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

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

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

константа obj = {яблоки: 1, бананы: 2, груши: 1};//Это возвратится ['бананы']
---> Для вытаскивания строки из массива: ['бананы'] [0]//возвращают 'бананы''

7
ответ дан 31 October 2019 в 13:41

Использование Подчеркивания или Lo-тире:

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

С Функциями Стрелки ES6:

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

jsFiddle демонстрация

27
ответ дан 31 October 2019 в 13:41

Предположим, Вы имеете 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
ответ дан 31 October 2019 в 13:41

Очень простой метод. мог бы не спешить обрабатывать

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));
3
ответ дан 31 October 2019 в 13:41

Другие вопросы по тегам:

Похожие вопросы: