Domanda


Sono abbastanza nuovo a JavaScript e non capisco alcuni dei suoi comportamenti. Voglio scrivere una versione ricorsiva di ridurre la funzione si trovano in Eloquente JavaScript libro. Questo è il mio codice:

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 ] ));

Il risultato è stato:

undefined

Per vedere cosa sta succedendo ho messo:

print( base );

come prima riga della funzione e il risultato è stato:

100
5
3
3
2
2
2
undefined

whould qualcuno mi spiega perché?

È stato utile?

Soluzione

In quel blocco else, dovrete

return rec_reduce( ... )

Altri suggerimenti

Un altro modo per farlo:

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

e poi lo si utilizza come:

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

Risultati:

10 

da 1 + 2 + 3 + 4 = 10

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top