Ответ 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);
У меня есть такой объект:
Object {a: 1, b: 2, undefined: 1}
Как быстро вытащить из него самый большой идентификатор значения (здесь: b
)? Я попытался преобразовать его в массив и затем отсортировать, но он не сработал, поскольку он отсортирован в алфавитном порядке (и кажется, что он перегружает данные взад и вперед только для того, чтобы получить одно значение из трех).
Например:
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);
Использование Underscore или Lo-Dash:
var maxKey = _.max(Object.keys(obj), function (o) { return obj[o]; });
с функциями стрелки ES6:
var maxKey = _.max(Object.keys(obj), o => obj[o]);
Вот предложение, если у вас много одинаковых значений, а не только один максимум:
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'`
Предположим, что у вас есть 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]);
Очень простой метод. может быть медленным для обработки
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));