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

Javascript 在对象数组中查找具有“id”属性最大值的对象,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,在我的对象数组中,我想找到id属性值最高的对象 这是我的阵列: myArray = [ { 'id': '73', 'foo': 'bar' }, { 'id': '45', 'foo': 'bar' }, // … ]; 通常,我使用$.grep查找数组中的值,如下所示: var result = $.grep(myArray, function (e) { return e.id == 73; }); 但在这种情况下,我需要为要

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

这是我的阵列:

myArray = [
  {
    'id': '73',
    'foo': 'bar'
  },
  {
    'id': '45',
    'foo': 'bar'
  },
  // …
];
通常,我使用
$.grep
查找数组中的值,如下所示:

var result = $.grep(myArray, function (e) {
    return e.id == 73;
});
但在这种情况下,我需要为要选择的对象提供一个特定的
id
值。

使用数组的方法。使用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'}
功能减速器by(减速器,acc){
返回函数(按、arr){
返回arr[arr.reduce(功能(acc、v、i){
var b=乘以(v);
回流减速机(acc[0],b)?[b,i]:acc;
},acc | |[by(arr[0]),0])[1];
};
}
var maximumBy=reduceBy(函数(a,b){返回a
map是一个遍历数组元素并执行特定操作的函数

const students = [
  { id: 100, name: 'Abolfazl', family: 'Roshanzamir' },
  { id: 2, name: 'Andy', family: 'Madadian' },
  { id: 1500, name: 'Kouros', family: 'Shahmir' }
]
如果要查找具有最大Id的对象,请执行以下操作:

const item = students.reduce((prev, current) => (+prev.id > +current.id) ? prev : current)
 // it returns  { id: 1500, name: 'Kouros', family: 'Shahmir' }
const item = students.reduce((prev, current) => (+prev.id < +current.id) ? prev : current)
// it returns {id: 2, name: "Andy", family: "Madadian"}
const max = Math.max.apply(null, students.map(item => item.id));
// it returns 1500
const min = Math.min.apply(null, students.map(item => item.id));
// it returns 2 
如果要查找最小Id为的对象,请执行以下操作:

const item = students.reduce((prev, current) => (+prev.id > +current.id) ? prev : current)
 // it returns  { id: 1500, name: 'Kouros', family: 'Shahmir' }
const item = students.reduce((prev, current) => (+prev.id < +current.id) ? prev : current)
// it returns {id: 2, name: "Andy", family: "Madadian"}
const max = Math.max.apply(null, students.map(item => item.id));
// it returns 1500
const min = Math.min.apply(null, students.map(item => item.id));
// it returns 2 
如果要查找最小Id,请执行以下操作:

const item = students.reduce((prev, current) => (+prev.id > +current.id) ? prev : current)
 // it returns  { id: 1500, name: 'Kouros', family: 'Shahmir' }
const item = students.reduce((prev, current) => (+prev.id < +current.id) ? prev : current)
// it returns {id: 2, name: "Andy", family: "Madadian"}
const max = Math.max.apply(null, students.map(item => item.id));
// it returns 1500
const min = Math.min.apply(null, students.map(item => item.id));
// it returns 2 

这种方法更实用,因为在空数组的情况下,它返回0,这与

Math.max.apply(null, [].map(item => item.id)) // -Infinity
如果你想得到“autoincrement”,不管数组是否为空,你都可以加1

// starts at 1 if our array is empty
autoincrement = items.reduce((maxId, item) => Math.max(maxId, item.id), 0) + 1;

UPD:使用map的代码较短,但使用reduce的代码较短更快,这在大型阵列中可以感觉到

let items=Array(100000).fill()
.map((el,u,arr)=>({id:~~(Math.random()*arr.length),名称:'Summer'});
常数n=100;
控制台时间(“减少测试”);
for(设i=1;iMath.max(maxId,item.id),0);
}
console.timeEnd(“减少测试”);
控制台时间(‘映射测试’);
for(设i=1;iitem.id).concat(0));
}
console.timeEnd(“映射测试”);
控制台时间(“地图分布测试”);
for(设i=1;iitem.id),0);
}

console.timeEnd('map spread test');
使用
forEach
而不是
map
。您不需要创建一个填充有
未定义的
的数组,并立即丢弃该数组。