Filtro para array

Olá, pessoal.
Estou em dúvida com uma lógica aqui e gostaria de vossa ajuda.

Tenho uma operação/workflow que retorna uma array nesse estilo:
image
basicamente, há vários “values” para “dates” que podem ser idênticos.

Existe alguma forma (e aceito usar o function node) de deixar somente o maior valor para cada “ano-mês” em uma nova array?

Seguindo o exemplo do print, ficaria
0: { “date”: “2024-01”, “value”:30.7 }
1: { “date”: “2024-02”, “value”: 28.5}

Olá,

É possível implementar essas operações utilizando um Function: Node, porém considerando cenários em que existam muitos items na lista de objetos é mais recomendado utilizar os blocos padrões da plataforma.

E essa implementação pode ser resolvida basicamente utilizando 3 blocos, conforme workflow em anexo. E os passos são os seguintes:

1°) É utilizado a operação Group By do bloco de Array, em que os items são agrupados pela propriedade “date”. Isso irá agrupar todos os items da lista que possuirem a data igual. Retornando isso em dates:

{
  "2024-01": [
    {
      "date": "2024-01",
      "value": 28.7
    },
    {
      "date": "2024-01",
      "value": 30.7
    },
    {
      "date": "2024-01",
      "value": 28.5
    }
  ],
  "2024-02": [
    {
      "date": "2024-02",
      "value": 28.5
    },
    {
      "date": "2024-02",
      "value": 27.8
    }
  ]
}

2°) É executado um loop para o objeto retornado no primeiro passo dates, e esse loop irá iterar uma vez para cada data, ou seja, irá executar duas vezes nesse caso, uma para “2024-01” e outra para “2024-02”;

3º) Por fim, dentro do loop, é utilizada a operação Sort By do bloco Array, fazendo a ordenação pela propriedade “value” de forma descendente (do maior para o menor).
E como saída do loop, é utilizada somente a primeira posição da operação de ordenação (output.[0]), ou seja, o item com o maior valor.

E assim como resultado, será obtido uma lista com o maior valor para cada data:

[
  {
    "date": "2024-01",
    "value": 30.7
  },
  {
    "date": "2024-02",
    "value": 28.5
  }
]

Lembrando que existem outras possibilidades de implementar essa lógica, essa é somente uma das opções.

Assim, espero ter auxiliado a resolver sua dúvida.

array_sort_by_date_value.zip (1,0,KB)

2 Curtidas

Perfeito, muito obrigado. Essa era a lógica que eu estava buscando e me atendeu perfeitamente.