github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/frontend/directeurs/src/components/retours/satisfactions.ts (about) 1 import { RepSondage, Satisfaction } from "@/logic/types"; 2 3 type fields = Omit<RepSondage, "message_enfant" | "message_responsable">; 4 type AveragedSondage = { [P in keyof fields]: number }; 5 const _fields: AveragedSondage = { 6 infos_avant_sejour: 0, 7 infos_pendant_sejour: 0, 8 hebergement: 0, 9 activites: 0, 10 theme: 0, 11 nourriture: 0, 12 hygiene: 0, 13 ambiance: 0, 14 ressenti: 0 15 }; 16 const _keys = Object.keys(_fields) as (keyof AveragedSondage)[]; 17 18 export function average(sondages: RepSondage[]): AveragedSondage { 19 const N = sondages.length; 20 const out: AveragedSondage = JSON.parse(JSON.stringify(_fields)); 21 if (N == 0) return out; 22 _keys.forEach(key => { 23 let valid = 0, 24 sum = 0; 25 sondages 26 .map(s => s[key]) 27 .forEach(v => { 28 if (v != Satisfaction.SVide) { 29 valid += 1; 30 sum += v; 31 } 32 }); 33 out[key] = valid > 0 ? sum / valid : 0; 34 }); 35 return out; 36 }