Esta función suma las longitudes de todos los elementos de la matriz y funciona devolviendo el valor final, pero al usar console.log se devuelve la longitud del primer elemento y NaN para el resto. ¿Por qué?
function test(s) { return s.split(' ').reduce((a, b) => { console.log(a + b.length) }, 0); } console.log(test("aa aaa aaaa")); a siempre tendrá el valor que se devuelve de la iteración anterior o el valor inicial 0 . Por lo tanto, en la primera iteración es 0 + b.length lo que da como resultado 2 . Pero luego no devuelve nada, por lo tanto, el tipo de retorno no está undefined . Por lo tanto, en la segunda iteración, tiene undefined + 2 , lo que da como resultado NaN y eso para todas las demás iteraciones. Como tampoco devuelve nada en la última iteración, el tipo de devolución en la última iteración no está undefined y su console.log() al final imprimirá undefined .
Debe return el valor para que se use en la próxima iteración.
function test(s) { return s.split(' ').reduce((a, b) => { return a + b.length }, 0); } console.log(test("aa aaa aaaa")); .as-console-wrapper { max-height: 100% !important; top: 0; }También puede quitar las llaves para una sintaxis más concisa:
function test(s) { return s.split(' ').reduce((a, b) => a + b.length, 0); } console.log(test("aa aaa aaaa")); .as-console-wrapper { max-height: 100% !important; top: 0; }