选择最小值的选项

时间:2014-07-10 19:32:24

标签: javascript angularjs

我有JSON:

[{name:'Mary', phone:'555-9876', age:19, date:'2011-06-12T00:00:00.000Z'},
{name:'John', phone:'555-1212', age:10, date:'2011-06-11T00:00:00.000Z'},
{name:'Mike', phone:'555-4321', age:21, date:'2011-07-13T00:00:00.000Z'},
{name:'Adam', phone:'555-5678', age:35, date:'2011-05-14T00:00:00.000Z'},
{name:'Julie', phone:'555-8765', age:29, date:'2011-06-15T00:00:00.000Z'}]

我应创建<select>并选择年龄最小的名称。就我而言 - 约翰。

我的控制器:

function Projects ($scope, $http) {
    $scope.rootEntry = [];
    $http.get('/api/...').success(function(root) {
        $scope.rootEntry = root;
        $scope.selectedRoot = $scope.rootEntry[0].name;
    });
}

和HTML:

<select ng-options="root.age as root.name for root in rootEntry ng-model="selectedRoot">
</select>

我可以选择第一项 - $scope.selectedRoot = $scope.rootEntry[0].name;

如何选择最低年龄?

2 个答案:

答案 0 :(得分:1)

在您的成功处理程序中,遍历$scope.rootEntry以查找年龄最小的项目,并将该值分配给$scope.selectedRoot

答案 1 :(得分:0)

有几种方法可以解决这个问题,你可以从$ filter和orderBy开始 https://docs.angularjs.org/api/ng/filter/orderBy 它应该在你的ngRepeat或$ filterprovider上给你一个按年龄排序的列表,然后抓住第一个元素。

在这里摆弄它 - http://jsfiddle.net/devitate/LKeQz/

没有任何测试 花哨的方式看起来像这样 - 不要相信这段代码

var min = Math.min.apply(null,
   Object.keys($scope.rootEntry).map(function(e) {
        return $scope.rootEntry[e]['age'];
   })
);

或者,一个更容易理解的方式,对我来说,至少,它只是一个循环,它会像 -

 var ages = [];
 angular.forEach( $scope.rootEntry , function(value, key) {
   ages.push(value.age);
 });
 return Math.min(ages);

但你应该跳过使用下划线js -

_.min($scope.rootEntry, function(e){ return e.age; });