Finding the max value of an attribute in an array of objects and return the entire object

前端 未结 5 1704
暗喜
暗喜 2021-01-22 12:04

I know a similar question has been asked here: Finding the max value of an attribute in an array of objects, but with that method there is no way to return the entire object con

相关标签:
5条回答
  • 2021-01-22 12:36
    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"]
    }
    
    0 讨论(0)
  • 2021-01-22 12:44

    If A is the array of objects.

    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];
    }
    
    0 讨论(0)
  • 2021-01-22 12:45

    Try this:

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

    (slice clones the array)

    0 讨论(0)
  • 2021-01-22 12:46

    The easiest way is to do this with reduce(). We can handle this in the minimum amount of steps needed, simply replacing the previous value if the current element's value is greater than the previous:

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

    Don't sort your array! The main issue with sorting an array, is it causes many needless iterations through. This gets drastically slower the bigger your array is, sorting to try and move elements up and down.

    0 讨论(0)
  • 2021-01-22 12:55

    Could also use something like Array.prototype.reduce.

    i.e.

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

    EDIT: If you want a basic way of doing it, simply by iterating through the array, you can do something like:

    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;
    }
    
    0 讨论(0)
提交回复
热议问题