从对象获取具有最高值的键

我有个类似的东西:

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

如何快速从中提取最大值标识符(这里是 b) ?我试着把它转换成数组,然后进行排序,但是没有成功,因为它是按字母顺序排序的(而且仅仅为了从三个值中得到一个值来来回回地处理数据似乎有点过头了)。

118798 次浏览

例如:

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:

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));

使用下划线或 Lo-Dash:

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

具有 ES6箭头功能:

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

JsFiddle 演示

如果你有许多相等的值,而不是只有一个最大值,这里有一个建议:

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

这将返回一个数组,其中包含所有具有最大值的键,以防有些键具有相同的值。 例如:

Const obj = {苹果: 1,香蕉: 1,梨: 1}
//This will return ['apples', 'bananas', 'pears']

另一方面,如果有一个最大值:

const obj = {apples: 1, bananas: 2, pears: 1 }; //This will return ['bananas']
要从数组中获取字符串,请返回: [‘橡胶’][0]//返回‘橡胶’’

let data = {a:1,b:2,undefined:3}
let maxValue = Object.entries(data).sort((x,y)=>y[1]-x[1])[0]

注意: 这是一个非常昂贵的过程,如果与大型对象(> = 1000000)一起使用,会阻塞事件循环。使用大型数组切片这些条目,并使用 setTimeout 反复调用上述方法。

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

我见过的最好的作品就是这个

const chars = {a: 1, b: 2, undefined: 1}


//set maximum value to 0 and maxKey to an empty string
let max = 0;
let maxKey = "";


for(let char in chars){
if(chars[char]> max){
max = chars[char];
maxKey= char
}
}


console.log(maxKey)

把其他答案中的一些想法结合起来。这将获得所有具有最高值的键,但是使用扩展运算符获得最大值,然后使用过滤数组方法:

const getMax = object => {
let max = Math.max(...Object.values(object))
return Object.keys(object).filter(key => object[key]==max)
}


let obj = {a: 12, b: 11, c: 12};
getMax(obj)

如果您需要从一个对象返回一个数组,其中包含具有(相同或相等)最高值的所有重复属性的键,请尝试以下操作:

const getMax = Object.keys(object)
.filter(x => {
return object[x] == Math.max.apply(null,
Object.values(object));
})
var object = { orange: 3, blue: 3, green: 1}
console.log(getMax) // ['orange', 'blue']