如何在特定对象值最大的数组中查找对象

问题描述 投票:0回答:2

嗨,下面是对象的JSON数组

[
  {
    "BookingId": 366024,
    "BookingDetailId": 340708,
    "JobCode" : 13
  },
  {
    "BookingId": 366023,
    "BookingDetailId": 340707,
    "JobCode" : 12
  },
  {
    "BookingId": 366022,
    "BookingDetailId": 340706,
    "JobCode" : 12
   }
]

例如,要获取其中BookingId为Max且JobCode为12的特定数组对象。在上面的数组中,我想要对象{“ BookingId”:366023,“ BookingDetailId”:340707,“工作代码”:12},其BookingId为max,而JobCode为12。

如何在角度6中进行操作

尝试的代码

var a = this.GridSource.find(x => x.JobCode == 12 && 
x.BookingId == Math.max.apply(Math, this.GridSource.map
(function(o) { return o.BookingId; })));
json angular angular6 angular5
2个回答
0
投票

您可以使用reduce来找到max元素,然后在find中使用它。

var max = array.reduce(function(prev, curr) {
    return prev['BookingId'] > curr['BookingId'] ? prev : curr;
});

var elem = array.find(x => x['JobCode'] == 12 && x['BookingId'] == max['BookingId']);

0
投票

您可以为此使用reduce。我在下面做了一个例子,希望对您有所帮助。如果没有符合条件的项目,则reduce的结果将为null

此外,请不要忘记类型:)

interface GridItem {
  BookingId: number;
  BookingDetailId: number;
  JobCode: number;
}

const GridSource: GridItem[] = [
  {
    BookingId: 366024,
    BookingDetailId: 340708,
    JobCode: 13
  },
  {
    BookingId: 366023,
    BookingDetailId: 340707,
    JobCode: 12
  },
  {
    BookingId: 366022,
    BookingDetailId: 340706,
    JobCode: 12
  }
];

const foundGridItem: GridItem = GridSource.reduce(
  (result: GridItem, value: GridItem) =>
    value.JobCode === 12 &&
    (result === null || value.BookingId > result.BookingId)
      ? value
      : result,
  null
);
© www.soinside.com 2019 - 2024. All rights reserved.