Javascript: reducir en función de una serie de objetos JSON no devuelven la adición de los valores

José Carlos :

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?

TJ Crowder:

Cuando usted está eligiendo una propiedad de esa manera, es necesario proporcionar el segundo argumento para reduceproporcionar un valor semilla para accel 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 reducese 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;
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=278566&siteId=1
Recomendado
Clasificación