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

时间:2019-02-13 19:28:13

标签: javascript

在这个对象数组中,如何找到最高的select DATEDIFF( DAY, (select BuildCMPLTDT from TrackerTest where TicketID='123456' and ValidCMPLTDT = '1900-01-01 00:00:00.000'), (select ValidCMPLTDT from TrackerTest where TicketID='123456' and BuildCMPLTDT = '1900-01-01 00:00:00.000') ) AS DateDiff ,其中groupAvgNum

大概不会有40个以上的对象,所以我可以遍历每个对象。有没有更快的方法?

gradeGender == '7G'

3 个答案:

答案 0 :(得分:1)

使用减少

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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