在对象数组中查找具有"id"属性的最大值的对象

Kri*_*Dey 7 javascript arrays jquery object

在我的对象数组中,我想找到id属性值最高的对象.

这是我的数组:

myArray = [
  {
    'id': '73',
    'foo': 'bar'
  },
  {
    'id': '45',
    'foo': 'bar'
  },
  // …
];
Run Code Online (Sandbox Code Playgroud)

通常我用来$.grep在数组中查找值,如下所示:

var result = $.grep(myArray, function(e){
    return e.id == 73;
  });
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我需要为id我想要选择的对象提供一个特定的值.

Abo*_*zlR 12

const students = [
  { id: 100, name: 'Abolfazl', family: 'Roshanzamir' },
  { id: 2, name: 'Andy', family: 'Madadian' },
  { id: 1500, name: 'Kouros', family: 'Shahmir' }
]
Run Code Online (Sandbox Code Playgroud)

如果要查找具有 max Id 的对象

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

如果您想找到具有 min Id 的对象

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

如果您想找到最大 Id

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

如果你想找到min Id

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


Don*_*nal 11

使用数组的map()方法.使用map,您可以提供迭代数组中每个元素的函数.在该函数中,您可以计算出具有最高id的对象.例如:

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

var maxid = 0;

myArray.map(function(obj){     
    if (obj.id > maxid) maxid = obj.id;    
});
Run Code Online (Sandbox Code Playgroud)

这将为您提供数组中对象的最大ID.

然后你可以使用grep来获取相关的对象:

var maxObj = $.grep(myArray, function(e){ return e.id == maxid; });
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想要具有最大ID的对象,则可以执行以下操作:

var maxid = 0;
var maxobj;

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

//maxobj stores the object with the max id.
Run Code Online (Sandbox Code Playgroud)

  • 使用`forEach`代替`map`。您不需要创建一个填充有`undefined`的数组,然后立即将其丢弃。 (3认同)

mbc*_*ute 10

问题是他想要找到id最大的对象,而不仅仅是最大的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'}
Run Code Online (Sandbox Code Playgroud)