2011-07-25 7 views
11

可能性の重複:MozillaのJavaScriptの1.6配列 '拡張' 機能を使用して
How to use Math.max, etc. as higher-order functions[1,2,3] .reduce(Math.max)をJavascriptで書くことができないのはなぜですか?

(減らすマップを、などをフィルタリングする)、なぜそれが期待通りに、次の作品ということである。

var max = [1,2,3].reduce(function(a,b) { return Math.max(a,b); }); 

しかし、以下は動作しません(それがNaNを生成します):

var max2 = [1,2,3].reduce(Math.max); 

Math.maxは可変関数なので、それはありますか?

+3

を未使用しますが、あなたは簡単にその最大値に配列を削減したい場合は、Math.max' 'に' .applyを() 'を使用することができます。 'var max = Math.max.apply(null、[1,2,3,4]);' – user113716

答えて

12

Math.maxすべての余分な変数function(previousValue, currentValue, index, array)が主にその配列の最後に何をすべきかわかりません。

[].reduce.call([1,2,3,6],function(a,b) { return Math.max(a,b); }); 

これは動作し、話題に完全に.call

+1

待って、私は...私は、余分なパラメータが減少するために渡された関数に渡されているのを忘れてしまった。したがって、maxはこれらの余分なパラメータで最大値を見つけることを試みています。 – sacheie

+0

右で、 'Math.max(1、[1,2,3])'が 'NaN'です – Joe

+4

配列を' this'値として渡す場合は、なぜ.call()を使用しますか?それはOPがすでに質問で示したことをやるための過度に複雑な方法です。 – nnnnnn

関連する問題