数组中的最大值(value是数组对象中的属性)

时间:2016-03-15 12:41:47

标签: javascript angularjs

我有一个对象数组,一个对象的例子是:

$scope.object = {
    Title: 'object1',
    Description: 'lorem ipsum',
    Value: 123
};

所以我的数组将包含几个具有这些属性的对象,如何在我的数组中找到具有最高'value'的对象?

我已经研究了其他问题like this,但它们是关于数组中包含纯值的数组,而不是对象。

我真正想要的是在html中找到具有最高价值的对象,也许使用angular $filter,如下所示:

ng-repeat="item in objectArray | filter: filterHere "

但它也适用于某个功能,现在我这样做,但我根本不喜欢这个解决方案:

var value = 0;
angular.forEach($scope.objectArray, function(object){
    if(object.Value > value){
        value = object.Value;
        $scope.itemToSeeInView = object;
    }
});

因此,如果对象的值大于要在视图中查看的var value项设置为该对象,如果视图中的$ filter不起作用,是否可以改进此函数?

4 个答案:

答案 0 :(得分:2)

您可以使用内置排序方法

$scope.objectArray.sort(function(a,b) { return a.Value < b.Value})[0]

答案 1 :(得分:2)

如果只想显示数组中的最小值/最大值,可以使用orderby过滤器,并将其与limitTo过滤器结合使用。这看起来像是:

<tr ng-repeat="p in vm.persons | orderBy:'someValue' |limitTo:1" >

或在你自己的例子中

ng-repeat="item in objectArray | orderBy:'Value': true | limitTo:1"

我创建了a small plnkr,因此您可以看到这一点。插件是我上面描述的扩展版本,让你切换一些东西。 如果我投入太多,请给我留言。我会相应地清理它。

答案 2 :(得分:0)

我担心你是否可以使用$ filter获得优化解决方案,但这是快速解决方案。

$scope.friends = [
    {name:'John', age:25},
    {name:'Mary',  age:35},
    {name:'Mike', age:18},
    {name:'Adam', age:35},
    {name:'Julie', age:23}
 ];

var arr = [];
angular.forEach($scope.friends, function(item) {
  arr.push(item["age"]);
});
$scope.result = arr.sort().reverse()[0]; // Highest value.

jsfiddle Demo

答案 3 :(得分:0)

当您使用ES6(带有转换器)时,您可以使用以下代码:

const friends = [
    {name:'John', age:25},
    {name:'Mary',  age:35},
    {name:'Mike', age:18},
    {name:'Adam', age:35},
    {name:'Julie', age:23}
];

const maxObject = friends.find(friend => !friends.some(item => item.age > friend.age));