Find object having maximum value for the `id` property in an array of objects

23,622

Solution 1

The question states that he wants to find the object with the greatest id, not just the greatest id...

var myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];

var max = myArray.reduce(function(prev, current) {
    if (+current.id > +prev.id) {
        return current;
    } else {
        return prev;
    }
});

// max == {'id':'73','foo':'bar'}

Solution 2

const students = [
  { id: 100, name: 'Abolfazl', family: 'Roshanzamir' },
  { id: 2, name: 'Andy', family: 'Madadian' },
  { id: 1500, name: 'Kouros', family: 'Shahmir' }
]

If you want to find the object with max Id :

const item = students.reduce((prev, current) => (+prev.id > +current.id) ? prev : current)
 // it returns  { id: 1500, name: 'Kouros', family: 'Shahmir' }

If you want to find the object with min Id :

const item = students.reduce((prev, current) => (+prev.id < +current.id) ? prev : current)
// it returns {id: 2, name: "Andy", family: "Madadian"}

If you wnat to find the max Id :

const max = Math.max.apply(null, students.map(item => item.id));
// it returns 1500

If you want to find the min Id :

const min = Math.min.apply(null, students.map(item => item.id));
// it returns 2 

Solution 3

Use the map() method of the array. Using map you can provide a function that iterates over every element in the array. In that function, you can work out the object with the highest id. For example:

myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];

var maxid = 0;

myArray.map(function(obj){     
    if (obj.id > maxid) maxid = obj.id;    
});

This will give you the max id of the objects in the array.

Then you can use grep to get the related object:

var maxObj = $.grep(myArray, function(e){ return e.id == maxid; });

Alternatively, if you just want the object with the max id, you can do this:

var maxid = 0;
var maxobj;

myArray.map(function(obj){     
    if (obj.id > maxid) maxobj = obj;    
});

//maxobj stores the object with the max id.

Solution 4

var max = 0;
var myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}]
var maxEle = myArray.map(function(ele){ if(ele.id>max){ max=ele} });

map is a function which iterates through array elements and performs specific operation.

Solution 5

function reduceBy(reducer, acc) {
    return function(by, arr) {
        return arr[arr.reduce(function(acc, v, i) {
            var b = by(v);
            return reducer(acc[0], b) ? [b, i] : acc;
        }, acc || [by(arr[0]), 0])[1]];
    };
}
var maximumBy = reduceBy(function(a,b){return a<b;});


var myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];
console.log(maximumBy(function(x){
    return parseInt(x.id,10)
}, myArray)); // {'id':'73','foo':'bar'}

Share:
23,622

Related videos on Youtube

Krishanu Dey
Author by

Krishanu Dey

Updated on July 09, 2022

Comments

  • Krishanu Dey
    Krishanu Dey almost 2 years

    In my array of objects, I want to find the object with the highest value for the id property.

    Here is my array:

    myArray = [
      {
        'id': '73',
        'foo': 'bar'
      },
      {
        'id': '45',
        'foo': 'bar'
      },
      // …
    ];
    

    Generally, I use $.grep to find values in an array, like this:

    var result = $.grep(myArray, function (e) {
        return e.id == 73;
    });
    

    But in this case I need to provide a specific id value for the object I want to select.

  • Sebastian Simon
    Sebastian Simon over 5 years
    Use forEach instead of map. You don’t need to create an array filled with undefined that you immediately discard.