Estoy tratando de devolver el promedio. ¿Cómo puedo obtener solo los números y omitir falso, "str"?
function average2 () { console.log (`arguments passed: ${arguments.length}`) console.log("All arguments:"); let sum = 0; let numOnly = arguments.match(/\d+/)[0] for (let i= 0; i < arguments.length; i++) { sum += arguments[i] } return (sum) / arguments.length } console.log (average2 (5, 6, false, "str", 100))Puede filtrar números usando el operador typeof , así:
function average (...params) { const nums = params.filter(n => typeof n == 'number'); return nums.reduce((acc,n) => acc+n) / nums.length; } console.log (average (5, 6, false, "str", 7)) en este ejemplo, acabo de calcular el promedio de nums, si desea calcular el promedio en función de la longitud de los argumentos, puede reemplazar return nums.reduce((acc,n) => acc+n) / nums.length; con return nums.reduce((acc,n) => acc+n) / params.length;
Puedes usar esto:
function average() { const numericArgs = [...arguments].filter(x => typeof x === 'number'); return numericArgs.reduce((a, b) => a + b, 0) / numericArgs.length; }Y puedes usar esto:
function average(...args) { const numericArgs = args.filter(x => typeof x === 'number'); return numericArgs.reduce((a, b) => a + b, 0) / numericArgs.length; }Simplemente agregue una verificación de tipo antes de hacer la adición:
function average2 () { let sum = 0; for (let i= 0; i < arguments.length; i++) { if(typeof arguments[i] === "number"){ sum += arguments[i] } } return (sum) / arguments.length } console.log (average2 (5, 6, false, "str", 100))