JavaScriptの再帰削減
-
09-10-2019 - |
質問
私は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から
所属していません StackOverflow