返回javascript对象中的最大值

时间:2013-12-08 00:49:00

标签: javascript jquery

我正在寻找一个简单的解决方案来查找对象中的最大整数我有以下对象名为numberZeros

Object {0: 3, 1: 3, 3: 2, 4: 3, 5: 4, 6: 2, 7: 3, 8: 5}

以下是我试图查看哪一个具有最大值但返回未定义的方法。

Array.max = function( numberZeros ){
    console.log(Math.max.apply( Math, numberZeros));
};

我猜它是因为它不适用于对象。如何让它返回8: 5

1 个答案:

答案 0 :(得分:3)

问题是.apply需要一个数组而不是一个对象。

在你的情况下,你应该可以使用数组而不是对象。 (编辑:抱歉,我没有看到它稀疏)

但你可以使用

var obj = {0: 3, 1: 3, 3: 2, 4: 3, 5: 4, 6: 2, 7: 3, 8: 5},
    max = -Infinity;
for(var i in obj) {
    if(obj.hasOwnProperty(i)) {
        max = Math.max(max, obj[i]);
    }
}

但我认为以下情况更好:

var arr = [3, 3,, 2, 3, 4, 2, 3, 5],
    max = Math.max.apply(null, arr);

您似乎希望获得argmax而不是max。然后,使用

var obj = {0: 3, 1: 3, 3: 2, 4: 3, 5: 4, 6: 2, 7: 3, 8: 5},
    max = -Infinity,
    argmax = void(0);
for(var i in obj) {
    if(obj.hasOwnProperty(i) && obj[i] >= max) {
        max = obj[i];
        argmax = i;
    }
}

var arr = [3, 3,, 2, 3, 4, 2, 3, 5],
    max = -Infinity,
    argmax = void(0);
for(var i=0, l=arr.length; i<l; ++i) {
    if(arr[i] >= max) {
        max = obj[i];
        argmax = i;
    }
}

注意:我已使用>=以防对象/数组中的所有值均为-Infinity,以便拥有argmax。如果您确定至少有一个值大于-Infinity,则可以使用<并获得一些微秒。