当前位置: 代码迷 >> JavaScript >> 具有条件的对象数组中的最高数目
  详细解决方案

具有条件的对象数组中的最高数目

热度:103   发布时间:2023-06-13 12:15:22.0

在这个对象数组中,如何找到gradeGender == '7G'的最高groupAvgNum

可能不会有超过40个对象,因此我可以遍历每个对象。 有没有更快的方法?

[
  { groupID: '27093', gradeGender: '6B', groupAvgNum: 4.75 },
  { groupID: '27159', gradeGender: '6G', groupAvgNum: 6 },
  { groupID: '27094', gradeGender: '7B', groupAvgNum: 10.13 },
  { groupID: '27182', gradeGender: '7G', groupAvgNum: 10.38 },
  { groupID: '27179', gradeGender: '7G', groupAvgNum: 7.25 },
  { groupID: '27184', gradeGender: '7G', groupAvgNum: 7.13 },
  { groupID: '27183', gradeGender: '7G', groupAvgNum: 5.5 },
  { groupID: '27100', gradeGender: '8B', groupAvgNum: 5.13 },
  { groupID: '27101', gradeGender: '8B', groupAvgNum: 7.63 },
  { groupID: '27103', gradeGender: '8B', groupAvgNum: 7.25 },
  { groupID: '27187', gradeGender: '8G', groupAvgNum: 6.5 },
  { groupID: '27188', gradeGender: '8G', groupAvgNum: 4 },
  { groupID: '27186', gradeGender: '8G', groupAvgNum: 9 }
]

使用减少

 var a = [{ groupID: '27093', gradeGender: '6B', groupAvgNum: 4.75 }, { groupID: '27159', gradeGender: '6G', groupAvgNum: 6 }, { groupID: '27094', gradeGender: '7B', groupAvgNum: 10.13 }, { groupID: '27182', gradeGender: '7G', groupAvgNum: 10.38 }, { groupID: '27179', gradeGender: '7G', groupAvgNum: 7.25 }, { groupID: '27184', gradeGender: '7G', groupAvgNum: 7.13 }, { groupID: '27183', gradeGender: '7G', groupAvgNum: 5.5 }, { groupID: '27100', gradeGender: '8B', groupAvgNum: 5.13 }, { groupID: '27101', gradeGender: '8B', groupAvgNum: 7.63 }, { groupID: '27103', gradeGender: '8B', groupAvgNum: 7.25 }, { groupID: '27187', gradeGender: '8G', groupAvgNum: 6.5 }, { groupID: '27188', gradeGender: '8G', groupAvgNum: 4 }, { groupID: '27186', gradeGender: '8G', groupAvgNum: 9 } ] console.log(a.reduce((acc, a) => { if (a.gradeGender == '7G') a.groupAvgNum > acc ? acc = a.groupAvgNum : acc = acc; return acc }, 0)) 

array.reduce((acc, item) => {
  return item.gradeGender === '7G' && item.groupAvgNum > acc
    ? item.groupAvgNum
    : acc;
}, 0);

如果您正在寻找一种更具可读性的解决方案,请尝试结合使用以下操作:

array.filter(obj => {
  return obj.gradeGender === '7G';
}).sort((o1, o2) => {
  return o1.groupAvgNum > o2.groupAvgNum;
})[0];

请注意,这对于大型阵列而言远非有效,尽管对于如此简短的列表,其他开销可能对整体性能更为重要。

  相关解决方案