Saltar al contenido

Cómo sumar elementos en el mismo índice en array de matrices en una sola array?

Investigamos en distintos espacios y así de esta forma brindarte la respuesta a tu inquietud, si continúas con alguna duda puedes dejar la duda y te contestamos sin falta, porque estamos para servirte.

Solución:

Puedes usar Array.prototype.reduce() en combinación con Array.prototype.forEach().

var array = [
        [0, 1, 3],
        [2, 4, 6],
        [5, 5, 7],
        [10, 0, 3]
    ],
    result = array.reduce(function (r, a) 
        a.forEach(function (b, i)  0) + b;
        );
        return r;
    , []);
document.write('
' + JSON.stringify(result, 0, 4) + '

');

Actualizar, un enfoque más corto tomando un mapa para reducir el array.

var array = [[0, 1, 3], [2, 4, 6], [5, 5, 7], [10, 0, 3]],
    result = array.reduce((r, a) => a.map((b, i) => (r[i] || 0) + b), []);
    
console.log(result);

Usando Lodash 4:

function sum_columns(data) 
  return _.map(_.unzip(data), _.sum);


var result = sum_columns([
  [1, 2],
  [4, 8, 16],
  [32]
]);

console.log(JSON.stringify(result));

Para versiones anteriores de Lodash y algunos comentarios

Lodash 4 ha cambiado la forma _.unzipWith funciona, ahora el iterado obtiene todos los valores pasados ​​como argumentos de distribución a la vez, por lo que no podemos usar el estilo reductor _.add más. Con Lodash 3, el siguiente ejemplo funciona bien:

function sum_columns(data) 
  return _.unzipWith(data, _.add);


var result = sum_columns([
  [1, 2],
  [4, 8, 16],
  [32],
]);

console.log(JSON.stringify(result));

_.unzipWith insertará undefineds donde la fila es más corta que las otras, y _.sum trata los valores indefinidos como 0. (a partir de Lodash 3)

Si sus datos de entrada pueden contener undefined y null elementos, y desea tratarlos como 0, puede usar esto:

function sum_columns_safe(data) 
  return _.map(_.unzip(data), _.sum);


function sum_columns(data) 
  return _.unzipWith(data, _.add);


console.log(sum_columns_safe([[undefined]])); // [0]
console.log(sum_columns([[undefined]]));      // [undefined]

Este fragmento funciona con Lodash 3, desafortunadamente no encontré una buena manera de tratar undefined como 0 en Lodash 4, ya que ahora la suma cambia, así que _.sum([undefined]) === undefined

una línea en ES6con map y reduce

var a = [ [0, 1, 3], [2, 4, 6], [5, 5, 7], [10, 0, 3] ];

var sum = a[0].map((_, i) => a.reduce((p, _, j) => p + a[j][i], 0));

document.write(sum);

Te mostramos las reseñas y valoraciones de los lectores

Si guardas algún recelo y capacidad de regenerar nuestro escrito te recordamos realizar una apostilla y con deseo lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *