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

IT技术 javascript
2021-02-12 13:51:51

我有一个这样的对象:

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

如何从中快速提取最大值标识符(此处b:)?我尝试将其转换为数组然后排序,但没有成功,因为它是按字母顺序排序的(为了从三个值中获取一个值而来回处理数据似乎有点矫枉过正)。

6个回答

例如:

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);
谢谢,但请注意,可以有更多项目,例如c, d, e... x.
2021-03-15 13:51:51
这适用于更多项目..reduce 函数是对整个数组的迭代;)
2021-03-16 13:51:51
@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; }, []);
2021-03-16 13:51:51
抱歉打扰了,但我怎么能得到一个2除此之外的b呢?
2021-03-24 13:51:51
@CD .. 如果我在这种情况下使用它“var obj = {a: 1, b: 2, c: 2};” 它只返回 c 但我需要 b & c,意味着所有键值最高
2021-04-13 13:51:51

使用下划线或 Lo-Dash:

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

使用 ES6 箭头函数:

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

jsFiddle 演示

从 Lo-Dash 4.0.0 开始,现在应该是var maxKey = _.maxBy(_.keys(obj), function (o) { return obj[o]; });.
2021-03-16 13:51:51

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

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

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

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

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

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

object是上面函数采用的参数,上面是定义函数的ES6语法,相当于:function getMax(object),这是否回答了您的问题?
2021-03-21 13:51:51
嗨,我应该把对象 var 到底放在哪里?当我 console.log 我得到一个“函数 getMax()”
2021-04-01 13:51:51

假设你有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));