在对象数组中查找具有“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');