2


私はJavaScriptにまったく慣れておらず、JavaScriptの動作のいくつかを理解していません。EloquentJavaScriptブックにあるreduce関数の再帰バージョンを書きたいです。それが私のコードです:

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

誰かが私に理由を説明しますか?

4

2 に答える 2

8

そのelseブロックでは、あなたはする必要があります

return rec_reduce( ... )
于 2011-01-11T11:11:52.230 に答える
4

それを行う別の方法:

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から

于 2014-05-28T21:55:36.197 に答える