Tengo esta serie de objetos JSON con estos datos:
let data = [
{"id_player_team" : 1, "name" : "Jose", "t2p_conv": 3, "t3p_conv": 5},
{"id_player_team" : 2, "name" : "Jesus", "t2p_conv": 2, "t3p_conv": 1},
{"id_player_team" : 3, "name" : "Maria", "t2p_conv": 3, "t3p_conv": 0},
{"id_player_team" : 4, "name" : "Irene", "t2p_conv": 4, "t3p_conv": 2},
{"id_player_team" : 5, "name" : "Carmen", "t2p_conv": 1, "t3p_conv": 2},
];
Quiero conseguir el resultado de la adición de "t2p_conv" llave. Para ello, utilizo reducir la función de JavaScript, como este:
let sumt2p = data.reduce((acc, item) => {
return acc + item.t2p_conv;
});
console.log("Result: " + sumt2p);
Cuando trato de mostrar el valor de sumt2p Tengo este resultado:
Result: [object Object]2341
¿Cómo es posible eso? ¿Estoy haciendo algo mal?
Cuando usted está eligiendo una propiedad de esa manera, es necesario proporcionar el segundo argumento para reduce
proporcionar un valor semilla para acc
el parámetro:
let sumt2p = data.reduce((acc, item) => {
return acc + item.t2p_conv;
}, 0);
// −−^^^
Si no se proporciona la semilla, la primera llamada a su devolución de llamada utiliza las dos primeras entradas de la matriz. Dado que está utilizando +
en un objeto (el primer objeto acc
), que se convierte en una cadena. :-)
Esta es una de las muchas razones por las que reduce
se suele más complicado de lo necesario . Aquí, por ejemplo, un bucle simple, tal vez con la desestructuración, hace el trabajo:
let sumt2p = 0;
for (const {t2p_conv} of data) {
sumt2p += t2p_conv;
}