我正在寻找一种简单的解决方案来查找对象中的最大整数,我将以下对象命名为 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
?
问题是.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);
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;
}
}
注意:为了使,我使用>=
了object / array中所有值都是-Infinity
的情况argmax
。如果您确定至少有一个大于的值-Infinity
,则可以使用<
并获得一些微秒。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句