最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

jquery - Javascript get object from array having min value and min value is needs to find and then find object - Stack Overflow

programmeradmin4浏览0评论

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
Add a comment  | 

5 Answers 5

Reset to default 12

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

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

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论