Lodash: как найти максимальные и минимальные значения каждого идентификатора - PullRequest
0 голосов
/ 30 октября 2018

Мой массив данных

array = [{id: 2, name: "kent", status_id: 2, date_1: "2018-08-09", date_2: "2018-07-06"},{id: 2, name: "kent", status_id: 10, date_1: "2018-01-09", date_2: "2018-09-06"},{id: 3, name: "tracy", status_id: 2, date_1: "2018-05-03", date_2: "2018-10-02"},{id: 3, name: "tracy", status_id: 2, date_1: "2018-01-10", date_2: "2018-09-12"},{id: 3, name: "tracy", status_id: 10, date_1: "2018-02-10", date_2: "2018-09-02"},{id: 4, name: "lucy", status_id: 10, date_1: "2018-12-10", date_2: "2018-08-09"},{id: 5, name: "steve", status_id: 10, date_1: "2018-12-7", date_2: "2018-04-01"}]

Если id = 2, я бы хотел найти max (date_1) и min (date_2) для каждого id = 2. Как мой вывод должен быть,

id
2    max(date_1)   min(date_2)
3    max(date_1)   min(date_2)
4    max(date_1)   min(date_2)
5    max(date_1)   min(date_2)

Я использую библиотеку Lodash. Буду признателен за помощь.

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете сначала groupBy id , а затем map каждое сгруппированное значение, используя mapValues, поскольку это будет объект. при отображении сгруппированных значений вы можете использовать _.maxBy и _minBy, чтобы найти max и min

var array = [{"id":2,"name":"kent","status_id":2,"date_1":"2018-08-09","date_2":"2018-07-06"},{"id":2,"name":"kent","status_id":10,"date_1":"2018-01-09","date_2":"2018-09-06"},{"id":3,"name":"tracy","status_id":2,"date_1":"2018-05-03","date_2":"2018-10-02"},{"id":3,"name":"tracy","status_id":2,"date_1":"2018-01-10","date_2":"2018-09-12"},{"id":3,"name":"tracy","status_id":10,"date_1":"2018-02-10","date_2":"2018-09-02"},{"id":4,"name":"lucy","status_id":10,"date_1":"2018-12-10","date_2":"2018-08-09"},{"id":5,"name":"steve","status_id":10,"date_1":"2018-12-7","date_2":"2018-04-01"}]
var res = 
  _(array)
  .groupBy('id')
  .mapValues(a => ({
    max: _.maxBy(a, 'date_1').date_1,
    min: _.minBy(a, 'date_2').date_2
  })).value();
  
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
...