J'ai une fonction qui calcule la somme des données json dans toutes les colonnes de mes tables. Je veux obtenir la moyenne de chaque colonne, mais je finis par obtenir NaN ou infini, qu'est-ce que je fais de mal?

Ceci est ma mise en œuvre pour obtenir la somme

getSum(columnNumber) {
    let sum = 0;
    const columnNumberToPropertyMap = [
      "id",
      "teamNumber",
      "rural",
      "completed",
      "entirehouseholdabsent",
      "postponed",
      "refused",
      "vacant",
      "dwelling"     
    ];
    const property = columnNumberToPropertyMap[columnNumber];
    return this.rural.reduce((acc, curr) => {
      //const adder = Number(curr[property]) || 0;
      const adder = isNaN(Number(curr[property])) ? 0 : Number(curr[property]);
      sum = acc + adder
      return sum;
    }, 0).toFixed(2);
  }

Cela me donne la somme de toutes les lignes de la colonne.

Comment j'essaie d'obtenir la moyenne de chaque colonne

 getSum(columnNumber) {
        let sum = 0;
        let average = 0;

        const columnNumberToPropertyMap = [
          "id",
          "teamNumber",
          "rural",
          "completed",
          "entirehouseholdabsent",
          "postponed",
          "refused",
          "vacant",
          "dwelling"     
        ];
        const property = columnNumberToPropertyMap[columnNumber];
        return this.rural.reduce((acc, curr) => {
          //const adder = Number(curr[property]) || 0;
          const adder = isNaN(Number(curr[property])) ? 0 : Number(curr[property]);
          sum = acc + adder
          average = (sum)/adder;
          return average ;
        }, 0).toFixed(2);
      }

Je me retrouve avec NaN ou l'infini en dessous de chaque colonne, je suppose

moyenne = total de chaque colonne / nombre d'éléments sur chaque colonne

2
arriff 15 mars 2021 à 10:40

1 réponse

Meilleure réponse

Pour trouver la moyenne, vous pouvez simplement appeler getSum puis la diviser par le nombre de lignes. Ainsi, la mise en œuvre serait comme ceci:

getAverage(columnNumber) {
    let sum = getSum(columnNumber);
    let count = this.rural.length;
    return sum / count;
}

Ou, sur une seule ligne, return getSum(columnNumber)/this.rural.length;

0
PMO1948 15 mars 2021 à 11:45