Tengo la siguiente matriz
arr = [ { 'Atencion Personalizada': 2, 'Caja': 3 }, { 'Atencion Personalizada': 1 }, { 'Tarifa Social': 3 } ]Salida esperada: 9
Y me gustaría resumir las propiedades de la manera más corta posible. La cuestión es que las claves de objeto siempre son variables, por lo que no puedo optar por:
arr.reduce((acc,item) => acc+item.keyName)Encontré esta publicación pero tampoco puedo adaptar el código a mi solución:
var data = [{ A: 4, B: 2 }, { A: 2, B: 1 }, { A: 3, B: 1 }, { A: 2, B: 1, C: 1 }], result = data.reduce((r, o) => (Object.entries(o).forEach(([k, v]) => r[k] = (r[k] || 0) + v), r), {});Gracias de antemano
Aquí está mi solución. Mapee a través de la matriz y aplane los valores de las propiedades, luego redúzcalos.
const arr = [ { 'Atencion Personalizada': 2, 'Caja': 3 }, { 'Atencion Personalizada': 1 }, { 'Tarifa Social': 3 } ] console.log(arr.flatMap(e => Object.values(e)).reduce((a, b) => a + b));Use reduce dos veces, una en la matriz externa y otra en los valores de cada objeto dentro de ella.
const arr = [ { 'Atencion Personalizada': 2, 'Caja': 3 }, { 'Atencion Personalizada': 1 }, { 'Tarifa Social': 3 } ]; const total = arr.reduce((gt, item) => gt + Object.values(item).reduce((t, sub) => t + sub, 0) , 0); console.log(total);¿Quizás algo como esto?
let acc = {}; for (let o of arr) for (let key in o) { acc[key] ??= 0; acc[key] += o[key]; }Aunque no es una sola línea