使用JavaScript从JSON对象中获取最大值

8

这应该是一个简单的问题。但我无法理解它。

如何使用JavaScript从此JSON中获取最大值。

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

我需要的键和值是:
"two":35 

因为它是最高的,所以感谢。

4个回答

10
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
    }
  }
}

@Insin,hasOwnProperty是什么意思?为什么你使用了eval? - systempuntoout
3
@systempuntoout的hasOwnProperty用于防止不良库向Object.prototype添加内容,因为我们不知道该代码将在哪种完整上下文中执行。我在回答问题时使用了eval(),因为该问题是关于JSON的 - JSON是一种文本格式,因此始终采用符合json.org规范的字符串形式。问题提出者可能将JSON与对象字面量表示法混淆了(有很多误导性的教程/文章并没有帮助),这就是我强调使用JSON文本的原因。 - Jonny Buchanan
@insin 如何在Android中做同样的事情? - blankon91

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'

2
这是我用于查找最大键的函数。
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;  
} 

1
+1 是唯一一个能够正确处理负值的解决方案。 - Michael Anderson

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接