查找对象数组中属性的最大值并返回整个对象

时间:2014-11-12 19:43:41

标签: javascript

我知道这里有一个类似的问题:Finding the max value of an attribute in an array of objects,但是使用该方法无法返回包含最大值的整个对象。

我有这个对象数组:

[
 {Prop: "something", value: 2},
 {Prop: "something_else", value: 5},
 {Prop: "bla", value: 3}
]

我想找到物业的最大价值"价值"然后我想返回整个对象

{Prop: "something_else", value: 5}

在javascript中最简单的方法是什么?

5 个答案:

答案 0 :(得分:1)

也可以使用像Array.prototype.reduce这样的东西。

function maxVal(arr) {
    return arr.reduce(function (prev, curr) {
        return (prev.value >= curr.value) ? prev : curr;
    });
}

编辑:如果你想要一个基本的方法,只需迭代数组,就可以做类似的事情:

function maxVal(arr) {
    var max = arr[0];
    for (var i = 1, iMax = arr.length; i < iMax; i++) {
        if (max.value < arr[i].value) {
            max = arr[i];
        }
    }
    return max;
}

答案 1 :(得分:0)

试试这个:

array.slice().sort(function(a, b) { return a.value < b.value; })[0];

slice克隆数组)

答案 2 :(得分:0)

如果A是对象数组。

function return_Max_Object(A)
{
 var M = -Infinity;
 var Max_index = -1;
 for(var i =0;i<A.length;i++)
 {
  if(A[i].value>M) 
  {
    M = A[i].value;
    Max_index = i;
  }
 }
 return A[Max_index];
}

答案 3 :(得分:0)

function getMaxByVal(objArr){
    var max=objArr[0]["value"];
    var indexStore=0;
    var  i=0;
    for(len=objArr.length; i<len;i++){
        if(max < objArr[i]["value"]){
            max=objArr[i]["value"];
            indexStore=i;
        }
    }
    return objArr[indexStore]["value"]
}

答案 4 :(得分:0)

最简单的方法是使用reduce()。我们可以以最少的步骤来处理此问题,如果当前元素的值大于上一个值,则只需替换上一个值即可:

const objs = [
 {Prop: "something", value: 2},
 {Prop: "something_else", value: 5},
 {Prop: "bla", value: 3}
];

const maxObj = objs.reduce((p, c) => p.value > c.value ? p : c);

console.log(maxObj);

不要对数组进行排序!对数组进行排序的主要问题是,它会导致许多不必要的迭代。数组越大,速度就越慢,可以尝试上下移动元素。