2015-10-15 208 views
-1

的最高值我有一個像這樣的對象:獲取對象

var lookup = { 
    42: "42", 
    43: "43" 
} 

我怎樣才能在這個對象的最高值?我期待得到43,因爲它是最高的數字。

+7

1)你有什麼試過? 2)你比較屬性名稱或值? 3)如果是值,你是否期望字符串被轉換爲整數然後進行比較? 4)你可以使用數組而不是對象嗎? –

回答

2

正如評論所示,你的問題有點含糊。如果你正在尋找解析爲整數的字符串值進行比較,下面應該工作根據你對象的結構:

var myArray = Object.keys(lookup).map(function(current){ 
    return parseInt(current) 
}); 
var max = Math.max.apply(null, myArray) 
+0

如果您的對象包含非數字值,則這不起作用。 parseInt將在非數字值上返回NaN,如果數組包含NaN,則Math.max.apply將返回NaN。 –

1

試試這個功能:

function getMax(dataObj){ 
var max; 
for(var key in dataObj){ 
    if (dataObj.hasOwnProperty(key)) { 
     var number = parseFloat(dataObj[key]); 
     //max by default is undefined and number could be NaN 
     if(!max && number){ 
      max = number; 
     } 
     else if(number > max){ 
      max = number; 
     } 
    } 
} 
return max; 
} 

這將遍歷一個對象並獲取該對象(而不是在原型鏈)上設置的所有屬性,嘗試將它們轉換成數字,然後返回最大值。請注意,這不是返回鍵值,而是值。

+0

如果你使用'Object.keys',你可以刪除hasOwnProperty()'檢查,保存一些輸入:) –

+0

好點@MisterEpic!如果您需要支持比IE9更早的瀏覽器,那麼Object.keys仍然存在兼容性問題。請查閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys上的文章以獲得有關Object.keys的完整信息。 –

0

對於有答案的多樣性的緣故,這裏是一個使用lodash的reduce和功能更強大的實現三元運營商:

_.reduce(_.values(lookup), function(max, n){ return n > max ? n : max; });