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?
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?
Share Improve this question edited Jun 17, 2022 at 15:00 RenaudC5 3,8291 gold badge12 silver badges30 bronze badges asked Mar 28, 2017 at 7:11 NitinNitin 9412 gold badges10 silver badges38 bronze badges 1- Possible duplicate of Compare JavaScript Array of Objects to Get Min / Max – Kapila Perera Commented Mar 28, 2017 at 7:18
5 Answers
Reset to default 12You 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);
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);
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.
You can check for the object with the lowest id by looping through the array like so, probably not the neatest way, but a solution either way:
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 tmp = list[0].id;
list.forEach(function (entry) {
if (entry.id < tmp) {
tmp = entry;
}
});
console.log(tmp);
https://jsfiddle.net/camgssk3/
other option may be to filter your array as you already have min "id"
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 min = Math.min.apply(Math, list.map(function (o) {
return o.id;
}));
filtered = list.filter(function(elem){
if(elem.id == min){console.log(elem);return elem;}
})