Как использовать оператор Max RxJs - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь получить максимальное значение startDate для вложенного объекта. Есть ли способ использовать функцию max в Rx Js для вложенных элементов, чтобы получить самую последнюю дату?

JSON тело ответа

const fakeData = [
{
  Name: "Blue",
  Attributes: {
    projex: [
      {
        dateStart: "2020-04-12T00:00:00",
        Project: "50",
        HeightPay: "1"
      },
      {
        dateStart: "2020-03-05T00:00:00",
        Project: "50",
      },
      {
        dateStart: "2020-02-04T00:00:00",
        Project: "50",
      }
    ]
  }
}

Desired OutPut

 const fakeData = [
{
  Name: "Blue",
  Attributes: {
    projex: [
      {
        dateStart: "2020-04-12T00:00:00",
        Project: "50",
        HeightPay: "1"
      }
    ]
  }
}

Код

  const sort = fakeData.map(data => ({
  ...data,
  Attributes: {
    projex: max((a, b) => a.Attributes.dateStart < b.AttributesdateStart ? -1 : 1)
  }

}))

1 Ответ

1 голос
/ 08 апреля 2020

Если бы это был ваш компонент, это то, что вы могли бы сделать

import { Component, OnInit } from '@angular/core';
import { of } from 'rxjs';
import { max, map, mergeMap } from 'rxjs/operators';

@Component({
  selector: 'hello',
  template: `<h1>Hello</h1>`,
  styles: [`h1 { font-family: Lato; }`]
})

export class HelloComponent implements OnInit  {

  fakeData = [
    {
      Name: "Blue",
      Attributes: {
        projex: [
          {
            dateStart: "2020-04-12T00:00:00",
            Project: "50",
            HeightPay: "1"
          },
          {
            dateStart: "2020-03-05T00:00:00",
            Project: "50",
          },
          {
            dateStart: "2020-02-04T00:00:00",
            Project: "50",
          }
        ]
      }
    },
    {
      Name: "Red",
      Attributes: {
        projex: [
          {
            dateStart: "2020-04-13T00:00:00",
            Project: "50",
            HeightPay: "1"
          },
          {
            dateStart: "2020-03-05T00:00:00",
            Project: "50",
          },
          {
            dateStart: "2020-02-04T00:00:00",
            Project: "50",
          }
        ]
      }
    }
  ];

  fakeObservable$ = of(...this.fakeData);

  ngOnInit() {
    this.fakeObservable$.pipe(
    mergeMap(x => x.Attributes.projex),
    max((a, b) => new Date(a.dateStart) < new Date(b.dateStart) ? -1 : 1 ))
    .subscribe(latest => {
      var res = this.fakeData.find(x => x.Attributes.projex.find(z => z.dateStart === latest.dateStart));
      console.log(res);
    })
  }

}
...