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
。您不需要创建一个填充有未定义的的数组,并立即丢弃该数组。