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

Javascript 从对象获取具有最高值的键,javascript,Javascript,我有一个这样的物体: 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 :

我有一个这样的物体:

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

假设你有一个像这样的
对象

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

使用下划线或低破折号:

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));
       });
    };
这将返回一个数组,其中所有的键都具有最大值,以防有一些值相等。 例如:如果

const obj={苹果:1,香蕉:1,梨:1}
//这将返回[‘苹果’、‘香蕉’、‘梨’]

另一方面,如果存在最大值:

const obj={苹果:1,香蕉:2,梨:1}//这将返回[‘香蕉’]
--->要从数组中获取字符串:[“香蕉”][0]//返回“香蕉”`

const数据={
abc:“,
myShortKey:“”,
myVeryLongKey:“”
}
const longestKeyLength=Math.max(…Object.keys(data.map)((d)=>d.length));
console.log(longestKeyLength);
log(Object.entries(data.map)([key,val])=>`${key}:${key.length}`)
注意:这是一个非常昂贵的过程,如果与大尺寸(>=1000000)的对象一起使用,将阻塞事件循环。使用大数组切片条目,并使用setTimeout重复调用上述方法

{a: 1, b: 2, undefined: 1}
我见过的最好的工作就是这个

constchars={a:1,b:2,未定义:1}
//将最大值设置为0,将maxKey设置为空字符串
设max=0;
让maxKey=“”;
for(让char在chars中){
如果(字符[char]>max){
max=chars[char];
maxKey=char
}
}

console.log(maxKey)
您想得到
2
还是
b
结果我想得到
b
;-)见:。。奖励答案::在这个答案中,您可以得到最小值和最大值:)谢谢,但是请注意还有更多的项目,比如
c,d,e。。。x
。这适用于更多项目。。reduce函数是整个数组的迭代;)对不起,打扰一下,除了
b
?@CD.之外,我怎样才能得到
2
。。如果我在本例中使用“var obj={a:1,b:2,c:2}”;它只返回c,但我需要b&c,这意味着所有具有最高values@Dinesh,try:
varobj={a:1,b:2,c:2},keys=Object.keys(obj),max=Math.max.apply(null,keys.map(x=>obj[x]))result=keys.reduce((result,key)=>{if(obj[key]==max){result.push(key);}return result;},[]);
从Lo Dash 4.0.0开始,现在应该是
var maxKey=u.maxBy(u.keys(obj),function(o){return obj[o];})
。嗨,我应该把对象var放在哪里呢?当我使用console.log时,我会得到一个“function getMax()”
object
是上述函数采用的参数,上面是定义函数的ES6语法,相当于:
function getMax(object)
,这是否回答了您的问题?
{a: 1, b: 2, undefined: 1}