Group JSON using javascript reduce()

Asked

Viewed 105 times

1

I used reduce to group my Json, but I need to group by more than 1 parameter to make the group correctly.

Follows the function used:

>     this.totalSpecific = obj.reduce(function (acumulador, valor) {
>           var indice = acumulador.map((o) => o.janela).indexOf(valor.janela);
>           if (indice == -1) {
>             acumulador.push(valor);
>           } else {
>             acumulador[indice].qtd += valor.qtd;
>           }
>           return acumulador;
>         }, []);

Using this function I have the following return:

[{"janela":"08","qtd":2342,"port":0},
 {"janela":"20","qtd":1546,"port":0}]

Example return I need:

[{"janela":"08","qtd":1142,"port":0},
 {"janela":"08","qtd":1250,"port":1}
 {"janela":"08","qtd":950,"port":2}
 {"janela":"20","qtd":1046,"port":0},
 {"janela":"20","qtd":450,"port":1},
 {"janela":"20","qtd":50,"port":2}]

Follows Json used:

let obj =   [{
                "janela": "08        ",
                "qtd": 3,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 11,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 63,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 2,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 129,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 3,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 5,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 6,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 33,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 53,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 77,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 589,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 4,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 13,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 18,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 131,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 36,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 24,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 109,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 11,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 40,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 6,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 43,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 351,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 68,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 21,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 84,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 340,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 6,
                "port": 0
              },
              {
                "janela": "08        ",
                "qtd": 5,
                "port": 1
              },
              {
                "janela": "08        ",
                "qtd": 3,
                "port": 1
              },
              {
                "janela": "08        ",
                "qtd": 5,
                "port": 1
              },
              {
                "janela": "08        ",
                "qtd": 3,
                "port": 1
              },
              {
                "janela": "08        ",
                "qtd": 9,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 2,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 3,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 3,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 6,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 2,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 5,
                "port": 2
              },
              {
                "janela": "08        ",
                "qtd": 3,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 150,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 4,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 12,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 38,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 188,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 247,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 9,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 11,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 2,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 22,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 155,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 23,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 15,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 96,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 81,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 12,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 75,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 169,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 9,
                "port": 0
              },
              {
                "janela": "20        ",
                "qtd": 5,
                "port": 1
              },
              {
                "janela": "20        ",
                "qtd": 31,
                "port": 1
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 1
              },
              {
                "janela": "20        ",
                "qtd": 5,
                "port": 1
              },
              {
                "janela": "20        ",
                "qtd": 31,
                "port": 1
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 1
              },
              {
                "janela": "20        ",
                "qtd": 4,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 3,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 38,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 3,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 18,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 7,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 3,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 1,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 61,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 3,
                "port": 2
              },
              {
                "janela": "20        ",
                "qtd": 6,
                "port": 2
              }
            ]
  • You want to add the field qtd for janela and port equal?

1 answer

2


obj.reduce((acc,currentValue) => {
serviceSumItem = acc.find(o => o.janela === currentValue.janela && o.port === currentValue.port);
serviceSumItem ? serviceSumItem.qtd += currentValue.qtd :  acc.push(currentValue);
return acc;

},[])

This structure does not seem to me to be correctly modeled, but the above code should work.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.