Как найти объект в массиве, где конкретное значение объекта является максимальным - PullRequest
0 голосов
/ 20 февраля 2020

Привет. Ниже приведен массив 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, "JobCode": 12}, чей BookingId равен макс, а JobCode - 12.

Как это сделать в angular 6

пробный код

var a = this.GridSource.find(x => x.JobCode == 12 && 
x.BookingId == Math.max.apply(Math, this.GridSource.map
(function(o) { return o.BookingId; })));

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Вы можете использовать уменьшить для этого. Я сделал пример ниже, надеюсь, это поможет. Если не было предметов, отвечающих условиям, то результат сокращения будет 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
);
0 голосов
/ 20 февраля 2020

Вы можете использовать метод 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']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...