Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript get object from array having min value and min value is needs to find and then find object

I have array of objects in object have different key so i want the object having minimum value in that array

list = [{
    'id': 4,
    'name': 'nitin',
    'group': 'angularjs'
  },
  {
    'id': 1,
    'name': 'nitin',
    'group': 'angularjs'
  },
  {
    'id': 2,
    'name': 'nitin',
    'group': 'angularjs'
  },
  {
    'id': 3,
    'name': 'nitin',
    'group': 'angularjs'
  }
]

I tried by

var minValue = Math.min.apply(Math, list.map(function (o) {
   return o.id;
}))

but it returns only the id not whole object then i have to make more filter for get object

is there any direct method to find object?

like image 486
Nitin Avatar asked Mar 28 '17 07:03

Nitin


3 Answers

I tried these solutions with Array.reduce but none of them were full proof. They do not handle cases where the array is empty or only has 1 element.

Instead this worked for me:

const result = array.reduce(
    (prev, current) =>
      (prev?.id ?? current?.id) >= current?.id ? current : prev,
    null,
  );

It returns null if array is empty and handles other cases well.

like image 185
Vineet Markan Avatar answered Oct 11 '22 23:10

Vineet Markan


You can use Array reduce method:

var list = [
{
'id':4,
'name':'nitin',
'group':'angularjs'
},
{
'id':1,
'name':'nitin',
'group':'angularjs'
},
{
'id':2,
'name':'nitin',
'group':'angularjs'
},
{
'id':3,
'name':'nitin',
'group':'angularjs'
}];

var result = list.reduce(function(res, obj) {
    return (obj.id < res.id) ? obj : res;
});

console.log(result);
like image 37
abhishekkannojia Avatar answered Oct 11 '22 22:10

abhishekkannojia


Using Array#reduce()

list = [{
    'id': 4,
    'name': 'nitin',
    'group': 'angularjs'
  },
  {
    'id': 1,
    'name': 'nitin',
    'group': 'angularjs'
  },
  {
    'id': 2,
    'name': 'nitin',
    'group': 'angularjs'
  },
  {
    'id': 3,
    'name': 'nitin',
    'group': 'angularjs'
  }
];

let min = list.reduce((prev, curr) => prev.id < curr.id ? prev : curr);

console.log(min);
like image 6
Weedoze Avatar answered Oct 11 '22 23:10

Weedoze