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

Javascript 具有条件的对象数组中的最大数目,javascript,Javascript,在这个对象数组中,我如何找到最高的groupAvgNumwheregradeGender=='7G' 可能永远不会有超过40个对象,所以我可以循环遍历每个对象。有没有更快的办法 [ { groupID: '27093', gradeGender: '6B', groupAvgNum: 4.75 }, { groupID: '27159', gradeGender: '6G', groupAvgNum: 6 }, { groupID: '27094', gradeGender: '7B

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

可能永远不会有超过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 }
]
使用reduce

var a=[{
groupID:'27093',
年级性别:“6B”,
groupAvgNum:4.75
},
{
groupID:'27159',
年级性别:“6G”,
groupAvgNum:6
},
{
groupID:'27094',
年级性别:“7B”,
groupAvgNum:10.13
},
{
groupID:'27182',
年级性别:“7G”,
groupAvgNum:10.38
},
{
groupID:'27179',
年级性别:“7G”,
groupAvgNum:7.25
},
{
groupID:'27184',
年级性别:“7G”,
groupAvgNum:7.13
},
{
groupID:'27183',
年级性别:“7G”,
groupAvgNum:5.5
},
{
groupID:'27100',
年级性别:“8B”,
groupAvgNum:5.13
},
{
groupID:'27101',
年级性别:“8B”,
groupAvgNum:7.63
},
{
groupID:'27103',
年级性别:“8B”,
groupAvgNum:7.25
},
{
groupID:'27187',
年级性别:“8G”,
groupAvgNum:6.5
},
{
groupID:'27188',
年级性别:“8G”,
groupAvgNum:4
},
{
groupID:'27186',
年级性别:“8G”,
groupAvgNum:9
}
]
console.log(a.reduce)(acc,a)=>{
如果(a.gradeGender='7G')
a、 groupAvgNum>acc?acc=a.groupAvgNum:acc=acc;
返回acc

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

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

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

循环的问题是什么,这是您必须要做的。请分享您最近尝试过的代码,试图找出这是否是最好的方法。我的问题问错了吗?如果你必须检查n个元素,它将始终是O(n)。这个问题看起来就像你在试图找到一种不涉及循环的方法,但是正如@jonaswillms提到的,这个问题将要求你以某种方式迭代数据集。它不需要手动循环(
.reduce()
是一个很好的解决方案,如下面的答案所述),但在后台,您仍然会迭代整个数据集。对于很多元素来说,仅仅为了获得最大值而进行排序会很慢(40个元素肯定不是很多)
array.filter(obj => {
  return obj.gradeGender === '7G';
}).sort((o1, o2) => {
  return o1.groupAvgNum > o2.groupAvgNum;
})[0];