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

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

这是我的arrays:

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

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

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

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

使用数组的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; }); 

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

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

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

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

 var maxid = 0; var maxobj; myArray.map(function(obj){ if (obj.id > maxid) maxobj = obj; }); //maxobj stores the object with the max id. 

问题是他想要找到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'} 
 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是一个迭代数组元素并执行特定操作的函数。

 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 

假设ID是“字符串化”数字并通过仅使用地图实现此目的:

 let arr = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}], maxIndex = -1, maxId; arr.map(function(obj, i){ if(maxIndex === -1){ maxIndex = i; maxId = Number(obj.id); } else { if (Number(obj.id) > maxId){ maxId = Number(obj.id); maxIndex = i; } } }); if(maxIndex !== -1) console.log(`Selected object: ${JSON.stringify(arr[maxIndex])}`) else console.warn('No max ID. No ID\'s at all');