JAVASCRIPT ARRAY (map and reduce)

0

How's personal?

I have this array here:

[
  {dia:2,turno: turno1,M:1,T:0,N:0},
  {dia:2,turno: turno2,M:0,T:2,N:0},
  {dia:2,turno: turno3,M:0,T:0,N:1},

  {dia:3,turno: turno1,M:122,T:0,N:0},
  {dia:3,turno: turno2,M:0,T:21,N:0},
  {dia:3,turno: turno3,M:0,T:0,N:12}
]

I want to turn it into this array here !!

[
    {dia:2,turno1:1,turno2:2,turno3:1},
    {dia:3,turno1:122,turno2:21,turno3:12},
]

Taking into account that: No

  

Day 2 on Turn 1 It sums all values of M

     

Day 2 on Turn 2 It adds all the values of T

     

Day 2 on Shift 3 It sums all values of N

     

The same happens on day 3

    
asked by anonymous 17.12.2018 / 07:19

1 answer

3

I do not know if this is the best way, but you can do it like this:

array = [{dia:2,turno: 'turno1',M:1,T:0,N:0},  {dia:2,turno: 'turno2',M:0,T:2,N:0},  {dia:2,turno: 'turno3',M:0,T:0,N:1},  {dia:3,turno: 'turno1',M:122,T:0,N:0},  {dia:3,turno: 'turno2',M:0,T:21,N:0},  {dia:3,turno: 'turno3',M:0,T:0,N:12}]

resultado = []
array.map(function(a) {
     resultado[a['dia']] = resultado[a['dia']] || {dia: a['dia']}
     resultado[a['dia']][a['turno']] = (a['M'] + a['T'] + a['N'])
})

console.log(resultado.filter(String))

I do not think there's much to explain. The map() will execute the function for each item of the array, which will populate resultado , based on the day of the current item, then add all M , T , N to that turn. / p>     

17.12.2018 / 07:52