Cree una función 'calcAverageHumanAge', que acepte una serie de edades de perros ('edades'), y haga lo siguiente en orden:
Datos de prueba:
Dato 1: [5, 2, 4, 1, 15, 8, 3] Dato 2: [16, 6, 10, 5, 6, 1, 4]
Mi solución (no sé por qué no funciona):
const calcAverageHumanAge = function (ageList) { const avgAge = ageList .map(val => (val <= 2 ? 2 * val : 16 + val * 4)) .fliter(val => val >= 18) .reduce((acc, val, i, list) => { return acc + val / list.length; }, 0);};Tienes tres problemas. Tu reduce no devuelve nada es el problema principal, pero también estás dividiendo por list.length en cada devolución de llamada, lo que no tiene ningún sentido (en realidad sí lo tiene y soy tonto), y luego no regresas cualquier cosa de la función. Quieres algo como esto:
const calcAverageHumanAge = function (ageList) { const filteredVals = ageList .map(val => (val <= 2 ? 2 * val : 16 + val * 4)) .filter(val => val >= 18); return filteredVals.reduce((acc, val) => acc + val) / filteredVals.length; };Cuando se ejecuta en sus datos:
calcAverageHumanAge([5, 2, 4, 1, 15, 8, 3]); // 44 calcAverageHumanAge([16, 6, 10, 5, 6, 1, 4]); // 47.333