Pregunta


Soy bastante nuevo en JavaScript y no entiendo algunos de sus comportamientos. Quiero escribir una versión recursiva de reducir la función que se encuentra en el libro elocuente JavaScript . Esa es mi código:

function rec_reduce( fn, base, list ) {
    if( list.length === 0 ) {
        return base;
    }
    else {
        rec_reduce( fn, fn( base, list[ 0 ] ), list.slice( 1 ) );
    }
}
print( rec_reduce( Math.min, 100, [ 5, 3, 7, 2, 6, 5 ] ));

El resultado fue:

undefined

Para ver lo que está pasando pongo:

print( base );

como una primera línea de la función y el resultado fue:

100
5
3
3
2
2
2
undefined

whould alguien me explique por qué?

¿Fue útil?

Solución

En ese bloque else, tendrá a

return rec_reduce( ... )

Otros consejos

Otra manera de hacerlo:

reduce_file.js:

function reduce(arr, func, initv){
      if(arr.length) return reduce(arr.slice(1), func, func(initv, arr[0]))
      else return initv
}
module.exports = reduce

y luego lo usa como:

reduce = require('./reduce_file.js')
console.log(reduce([1,2,3,4], function(prev, curr) {
  return prev + curr
}, 0))

resultado:

10 

de 1 + 2 + 3 + 4 = 10

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top