Рекурсивное сокращение в JavaScript - PullRequest
2 голосов
/ 11 января 2011


Я довольно новичок в JavaScript и не понимаю некоторые его особенности.Я хочу написать рекурсивную версию функции сокращения, найденную в Eloquent JavaScript книге.Вот мой код:

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

Результат был:

undefined

Чтобы увидеть, что происходит, я поставил:

print( base );

в качестве первой строки функциии результат был:

100
5
3
3
2
2
2
undefined

Кто-нибудь объяснит мне, почему?

Ответы [ 2 ]

7 голосов
/ 11 января 2011

В этом else блоке вам придется

return rec_reduce( ... )
2 голосов
/ 29 мая 2014

Еще один способ сделать это:

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

и затем вы используете его как:

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

результат:

10 

из 1 + 2 + 3 + 4 = 10

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...