从对象获取具有最高价值的密钥


82

我有一个这样的对象:

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

如何快速从中提取最大的标识符(在这里b:)?我尝试将其转换为数组然后进行排序,但由于它是按字母顺序排序的,因此无法解决(为了获得三个值中的一个而来回处理数据似乎是一种过大的杀伤力)。


您想要得到2还是b结果
Naeem Shaikh 2014年

2
我想得到b;-)
Tomek Buszewski 2014年

请参阅:: stackoverflow.com/questions/11142884/… ..奖励答案::您在此答案中也将获得最小值和最大值。:)
Sudhir Bastakoti 2014年

Answers:


132

例如:

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

1
谢谢,但请注意,可能还有更多项目,例如c, d, e... x
Tomek Buszewski 2014年

7
这适用于更多项目
。.reduce

对不起,打扰了,但是我还能如何获得2除价b
Tomek Buszewski 2014年

@CD ..如果在这种情况下使用“ var obj = {a:1,b:2,c:2};” 它只返回c但我需要b&c,意味着所有键的值都最高
Dinesh

3
@Dinesh,尝试:var obj = {a: 1, b: 2, c: 2}, keys = Object.keys(obj), largest = Math.max.apply(null, keys.map(x => obj[x])) result = keys.reduce((result, key) => { if (obj[key] === largest){ result.push(key); } return result; }, []);
CD ..

34

使用下划线或下划线:

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

使用ES6箭头功能:

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

jsFiddle演示


14
从Lo-Dash 4.0.0开始,现在应该是var maxKey = _.maxBy(_.keys(obj), function (o) { return obj[o]; });
thodic

9

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

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

如果有一些键的值相等,则返回一个数组,所有键的最大值。例如:如果

const obj = {苹果:1,香蕉:1,梨:1}
//这将返回['apples','bananas','pears']

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

const obj = {苹果:1,香蕉:2,梨:1}; //这将返回['bananas']
--->要从数组中取出字符串:['bananas'] [0] //返回'bananas'`


嗨,我应该把对象var放在哪里?当我console.log时,我得到一个“函数getMax()”
Jeff

1
object是上面的函数采用的参数,上面是用于定义函数的ES6语法,等效于:function getMax(object),这是否回答了您的问题?
polyccon

6

假设您有一个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]);

4

很基本的方法。可能处理缓慢

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

0

const data = {
  abc: '',
  myShortKey: '',
  myVeryLongKey: ''
}


const longestKeyLength = Math.max(...Object.keys(data).map((d) => d.length));

console.log(longestKeyLength);

console.log(Object.entries(data).map(([key, val]) => `${key}: ${key.length}`));

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.