2010-04-12 81 views
8

這應該是一個簡單的方法。我只是不知道。使用Javascript從Json對象獲取最大值

如何從javascript中獲取這段JSON的最大值。

{"data":{"one":21,"two":35,"three":24,"four":2,"five":18},"meta":{"title":"Happy with the service"}} 

我需要的鍵和值是:

"two":35 

,因爲它是最高

感謝

回答

9
var jsonText = '{"data":{"one":21,"two":35,"three":24,"four":2,"five":18},"meta":{"title":"Happy with the service"}}' 
var data = JSON.parse(jsonText).data 
var maxProp = null 
var maxValue = -1 
for (var prop in data) { 
    if (data.hasOwnProperty(prop)) { 
    var value = data[prop] 
    if (value > maxValue) { 
     maxProp = prop 
     maxValue = value 
    } 
    } 
} 
+0

使用hasOwnProperty()是一個很好的觀點。 – 2010-04-12 09:41:56

+0

@Insin hasOwnProperty是什麼意思?爲什麼使用eval? – systempuntoout 2010-04-12 09:44:06

+2

@systempuntoout hasOwnProperty可以防止頑皮的庫向Object.prototype添加東西,因爲我們不知道將執行此代碼的完整上下文。 我用eval()作爲JSON的問題 - JSON是一種文本格式,因此總是採用符合json.org規範的字符串形式。這可能是問題提供者將JSON與對象文字符號混淆(有很多很多誤導教程/文章,這些文章對此沒有幫助),這是我爲什麼使用JSON文本的原因。 – 2010-04-12 10:35:30

1

這是我的功能最大的關鍵

function maxKey(a) { 
    var max, k; // don't set max=0, because keys may have values < 0 
    for (var key in a) { if (a.hasOwnProperty(key)) { max = parseInt(key); break; }} //get any key 
    for (var key in a) { if (a.hasOwnProperty(key)) { if((k = parseInt(key)) > max) max = k; }} 
    return max; 
} 
+0

+1是正確處理負值的唯一解決方案。 – 2013-08-15 02:41:27

8

如果你有underscore

var max_key = _.invert(data)[_.max(data)]; 

這是如何工作的:

var data = {one:21, two:35, three:24, four:2, five:18}; 
var inverted = _.invert(data); // {21:'one', 35:'two', 24:'three', 2:'four', 18:'five'}; 
var max = _.max(data); // 35 
var max_key = inverted[max]; // {21:'one', 35:'two', 24:'three', 2:'four', 18:'five'}[35] => 'two' 
0

你也可以遍歷對象,你解析JSON後。

var arr = jQuery.parseJSON('{"one":21,"two":35,"three":24,"four":2,"five":18}'); 

var maxValue = 0; 

for (key in arr) 
{ 
    if (arr[key] > maxValue) 
    { 
      maxValue = arr[key]; 
    } 
} 

console.log(maxValue);