2011-01-11 15 views
2


私はJavaScriptにはかなり新しく、いくつかの動作を理解していません。 Eloquent JavaScript本にあるreduce関数の再帰的なバージョンを書いてみたい。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 

誰でも私を説明してくださいハイ?

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 

、その後、あなたのようにそれを使用することelseブロックで

答えて

6

、あなたは

return rec_reduce(...) 
+0

THX LOTから

10 

!私は今この戻り値を忘れています。主に何か再帰的なものが必要なので、私はSchemeでプロトタイプを作りました - 返信文はありません;)Thx again! – trzewiczek

+0

@trzewiczek受け入れる気には?あなたの*プロフィールもうまくいきます。 –

+0

申し訳ありませんが - それはちょうど私が経験していない - それについて忘れてしまった!! – trzewiczek

2

にそれを行う別の方法があるでしょう:

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

結果:1 + 2 + 3 + 4 = 10