Javascript 如何根据不同的键从对象数组中获取最大值
我想从具有相同键值对的对象数组中找到最大标记Javascript 如何根据不同的键从对象数组中获取最大值,javascript,arrays,object,Javascript,Arrays,Object,我想从具有相同键值对的对象数组中找到最大标记 var arr = [ {id:1, prog:'A', marks:90 }, {id:1 ,prog:'A', marks:89 }, {id:2, prog:'A', marks:94 }, {id:3, prog:'B', marks:91 }, {id:4, prog:'B' ,marks:34}, {id:5, prog:'B', marks:56 }, {id:6, prog:'C', marks:50}
var arr = [
{id:1, prog:'A', marks:90 },
{id:1 ,prog:'A', marks:89 },
{id:2, prog:'A', marks:94 },
{id:3, prog:'B', marks:91 },
{id:4, prog:'B' ,marks:34},
{id:5, prog:'B', marks:56 },
{id:6, prog:'C', marks:50},
{id:7, prog:'C', marks:99 }
]
这是我的数组,我想要像这样的输出
每个项目的最高分数
var outputArr = [
{id:2, prog:'A', marks:94},
{id:3, prog:'B', marks:91 },
{id:7 , prog:'C', marks:99 }
]
试一试
让arr=[
{id:1,prog:A',marks:90},
{id:1,prog:A,marks:89},
{id:2,prog:A,marks:94},
{id:3,prog:'B',marks:91},
{id:4,prog:B',marks:34},
{id:5,prog:B',marks:56},
{id:6,prog:C',marks:50},
{id:7,prog:'C',marks:99}
];
设tmp={};
arr.forEach(o=>tmp[o.prog]=(tmp[o.prog]| |[]).concat(o))
设r=Object.keys(tmp).map(k=>tmp[k].reduce((a,b)=>a.marks>b.marks?a:b))
log(JSON.stringify(r))代码>您可以使用下面的自定义功能
function groupByMax(arr, groupKey, maxKey) {
const grouped = arr.reduce((acc, item) => {
if (acc[groupKey] && acc[groupKey][maxKey] < item[maxKey]) {
acc[groupKey] = item;
} else if (!acc[groupKey]) {
acc[groupKey] = item;
}
return acc;
}, {});
return Object.values(grouped);
};
console.log(groupByMax(yourArray, 'prog', 'marks'));
函数groupByMax(arr、groupKey、maxKey){
const group=arr.reduce((附件,项目)=>{
if(acc[groupKey]&&acc[groupKey][maxKey]
如果最大值相同怎么办?您尝试过什么?如果有多个对象具有相同的prog
和标记值,该怎么办?欢迎使用StackOverflow!请在提问前先阅读,这样你的答案更有可能被回答,而不是被否决。谢谢你指导我eibersji@NinaScholz当标记的值相同时,我会将该对象添加到输出数组中,无需排序。只选择最大值。@NinaScholz,是的,不需要真正的排序,我已经更新了我的答案。
function groupByMax(arr, groupKey, maxKey) {
const grouped = arr.reduce((acc, item) => {
if (acc[groupKey] && acc[groupKey][maxKey] < item[maxKey]) {
acc[groupKey] = item;
} else if (!acc[groupKey]) {
acc[groupKey] = item;
}
return acc;
}, {});
return Object.values(grouped);
};
console.log(groupByMax(yourArray, 'prog', 'marks'));