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

Tom*_*ski 63 javascript

我有一个像这样的对象:

Object {a: 1, b: 2, undefined: 1} 
Run Code Online (Sandbox Code Playgroud)

如何从中快速提取最大值标识符(此处b为:)?我尝试将它转换为数组,然后进行排序,但它没有成功,因为它按字母顺序排序(并且为了从三个中获取一个值来回看待来回数据似乎是一种过度杀伤力).

CD.*_*D.. 97

例如:

var obj = {a: 1, b: 2, undefined: 1};

Object.keys(obj).reduce(function(a, b){ return obj[a] > obj[b] ? a : b });
Run Code Online (Sandbox Code Playgroud)

ES6中:

var obj = {a: 1, b: 2, undefined: 1};

Object.keys(obj).reduce((a, b) => obj[a] > obj[b] ? a : b);
Run Code Online (Sandbox Code Playgroud)

  • 这适用于更多项目.. reduce函数是遍历整个数组的迭代;) (4认同)
  • @Dinesh,尝试:`var obj = {a:1,b:2,c:2},keys = Object.keys(obj),maximum = Math.max.apply(null,keys.map(x => obj) [x]))result = keys.reduce((result,key)=> {if(obj [key] === maximum){result.push(key);} return result;},[]);` (3认同)
  • 谢谢,但请注意,可以有更多项目,例如 `c, d, e... x`。 (2认同)

Far*_*ina 28

使用Underscore或Lo-Dash:

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

使用ES6箭头功能:

var maxKey = _.max(Object.keys(obj), o => obj[o]);
Run Code Online (Sandbox Code Playgroud)

jsFiddle演示

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

Rid*_*ola 10

{a: 1, b: 2, undefined: 1}
Run Code Online (Sandbox Code Playgroud)

我见过的最好的工作是这个

{a: 1, b: 2, undefined: 1}
Run Code Online (Sandbox Code Playgroud)


pol*_*con 7

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

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

这将返回一个数组,其中所有数组的键都具有最大值,以防有些数组具有相等的值.例如:if

const obj = {apples:1,bananas:1,pears:1}
//这会返回['apples','bananas','pears']

如果另一方面有最大值:

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


Ami*_*oki 5

假设您有一个Object这样的人:

var obj = {a: 1, b: 2, undefined: 1}
Run Code Online (Sandbox Code Playgroud)

你可以这样做

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]);
Run Code Online (Sandbox Code Playgroud)