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'));