2015-11-06 85 views
1

找不到任何關於此的信息。從Angular中的對象獲取具有最大值的元素

我有這樣的控制器:

app.controller('StatsCtrl', function ($scope, $http) { 
$http.get('stats.json').success(function(data) { 
    $scope.stats = data; 
}); 
}); 

的stats.json有:

{"lang":{"en":28,"und":1,"ja":9,"es":14,"ru":1,"in":1,"ko":1,"th":1,"ar":1}} 

我需要做的是在控制器從lang對象的最大值分配給$scope.max。做這個的最好方式是什麼?

+0

你想金額(數量)分配給最大或關鍵(如「en」,「und」)最大? –

+0

@ user2393267在這種情況下將是28的值(數字)。 – neptune

回答

1

你可以用一對夫婦的本地方法做到這一點:

$scope.max = Math.max.apply(null, Object.keys(data.lang).map(function(key) { 
    return data.lang[key]; 
})); 
+0

添加到控制器,但我想我錯過了一些東西,因爲它不起作用:'app.controller('StatsCtrl',函數($ scope,$ http){ $ http.get('stats。 (函數(數據){scope.stats = data; }); $ scope.max = Math.max.apply(null,Object.keys(data.lang).map(function( key){ return data.lang [key]; })); });' – neptune

+0

哎呀,它現在正在工作。謝謝。 'app.controller('StatsCtrl',函數($ scope,$ http)$ http.get('stats.json')。success(函數(數據){ $ scope.stats = data; $ scope。 max)= Math.max.apply(null,Object.keys(data.lang).map(function(key){data_language};} – neptune

1

我會建議underscore.js _.max使用:

_.max(list, [iteratee], [context]) 

返回列表中的最大值。如果提供了迭代函數,它將用於每個值以生成排序值的標準。如果列表爲空,則返回Infinity,因此可能需要isEmpty保護。

var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}]; 
_.max(stooges, function(stooge){ return stooge.age; }); 
=> {name: 'curly', age: 60}; 

link

2

https://jsfiddle.net/kaiser07/6h317Lvv/

var jsonText = '{"lang":{"en":28,"und":1,"ja":9,"es":14,"ru":1,"in":1,"ko":1,"th":1,"ar":1}}'; 
    var data = JSON.parse(jsonText).lang 
    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 
     } 
     } 
    } 
相關問題