Add each key of an object in an array of arrays, keeping the array format

0

I have the following information

[[{aceptacion: 1, rechazo: 2},
 {aceptacion: 0, rechazo: 1}],
[{aceptacion: 2, rechazo: 2},
 {aceptacion: 0, rechazo: 7}],
[{aceptacion: 0, rechazo: 2},
 {aceptacion: 0, rechazo: 3}]]

and I need the following answer:

[{aceptacion: 3, rechazo: 6},
 {aceptacion: 0, rechazo: 11}]

but I do not know how to add to reach that result.

in serious theory:

  

add the acceptances of the first Object of each arrangement, 1 + 2 + 0 = 3

     

add the acceptances of the second Object of each arrangement, 0 + 0 + 0 = 0

     

....... up to element N

     

and the same with rejections

my intent is:

let arreglo = [
    [{
        aceptacion: 1,
        rechazo: 2
      },
      {
        aceptacion: 0,
        rechazo: 1
      }
    ],
    [{
        aceptacion: 2,
        rechazo: 2
      },
      {
        aceptacion: 0,
        rechazo: 7
      }
    ],
    [{
        aceptacion: 0,
        rechazo: 2
      },
      {
        aceptacion: 0,
        rechazo: 3
      }
    ];
    let suma
    arreglo.forEach(function(d) {
      d.[0]
    })
    
asked by hubman 06.09.2018 в 16:48
source

2 answers

2

One possibility is the following:

let arreglo = 
[
    [{
        aceptacion: 1,
        rechazo: 2
      },
      {
        aceptacion: 0,
        rechazo: 1
      }
    ],
    [{
        aceptacion: 2,
        rechazo: 2
      },
      {
        aceptacion: 0,
        rechazo: 7
      }
    ],
    [{
        aceptacion: 0,
        rechazo: 2
      },
      {
        aceptacion: 0,
        rechazo: 3
      }
    ]
];

let resultado = arreglo[0]
for (var i = arreglo.length - 1; i > 0; i--) { //Excluyo el primero porque lo uso para sumar los totales
  for (var a = arreglo[i].length - 1; a >= 0; a--) {
    resultado[a].aceptacion += arreglo[i][a].aceptacion
    resultado[a].rechazo += arreglo[i][a].rechazo
  }
}

console.log(resultado);
    
answered by 06.09.2018 / 17:10
source
0

I leave you a much more complex but very efficient answer and with very good performance.

let arreglo = [
    [{
        aceptacion: 1,
        rechazo: 2
      },
      {
        aceptacion: 0,
        rechazo: 1
      }
    ],
    [{
        aceptacion: 2,
        rechazo: 2
      },
      {
        aceptacion: 0,
        rechazo: 7
      }
    ],
    [{
        aceptacion: 0,
        rechazo: 2
      },
      {
        aceptacion: 0,
        rechazo: 3
      }
    ]
 ];
 
const suma = (arreglo) => 
	arreglo.reduce(( acc, arr ) =>
		acc.concat(arr.reduce((acc, { aceptacion, rechazo } ) => {
			acc.aceptacion += aceptacion;
			acc.rechazo += rechazo;
			return acc;
		}, {aceptacion: 0, rechazo: 0})
	, []));
  
  console.log(suma(arreglo));
    
answered by 13.09.2018 в 01:57