質問


私はJavaScriptを非常に初めてで、その行動のいくつかを理解していません。で見つかったredoce機能の再帰バージョンを書きたい 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

誰かが私になぜ説明してくれませんか?

役に立ちましたか?

解決

その中で else ブロック、あなたはしなければなりません

return rec_reduce( ... )

他のヒント

それを行う別の方法:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top