2016-08-11 4 views
0

私は高次の関数を使って、より良いjavascript開発者になろうとしています。Javascript Reduce Function機能していません

私が下のコードから取得しているエラーは、TypeError: myArray.reduce is not a functionです。私は正しいデザインパターンに従っていると私は誓います。

function myFunction(myArray) { 
    return myArray.reduce((prev, curr) => prev * curr); 
} 
var myArray = [3, 2, 3] 
var myObject = myFunction.apply(myObject, myArray); // Will each element in array be multiplied? 
+2

なぜ単純に 'var myObject = myFunction(myArray);' – Arnauld

+0

あなたはどんなブラウザ/バージョンを使用していますか?クロム44が=> 47,48をサポートしていないことがわかった。 – klog

+0

@Arnauld私は、適用、矢印関数、およびパターンを減らそうとしています。 –

答えて

4

あなたは.callの代わり.applyを使用します。

.callは各オブジェクトに渡され、関数に直接渡されますが、.applyはパラメータの配列を受け取り、それぞれ別の変数として渡します。

あなたはこの単純なスクリプトで、以下の効果を見ることができます:

function myFunction() { 
 
    console.log(arguments); 
 
} 
 
var myArray = [3, 2, 3]; 
 

 
myFunction.call(null, myArray); 
 
/* 
 
Will echo out { 
 
    "0": [ 
 
    3, 
 
    2, 
 
    3 
 
]} 
 
    
 
The first variable will contain the entire array 
 
*/ 
 

 
myFunction.apply(null, myArray); 
 
/* 
 
Will echo out { 
 
    "0": 3, 
 
    "1": 2, 
 
    "2": 3 
 
} 
 
    
 
The first variable will be 3, the second 2, and the third 3 
 
*/

+2

を使うべきです。代わりに 'myFunction.apply(myObject、[myArray])'。 – melpomene

+0

私はもう少し読書をする必要があるように見えます! –

+0

@ChrisClarkもっと読む - > http://stackoverflow.com/questions/1986896/what-is-the-difference-between-call-and-apply – aw04

1

代わりの

var myObject = myFunction.apply(myObject, myArray); 

を使用して使用

var myObject = myFunction.call(myObject, myArray); 

function.prototype.applyメソッドは配列の各項目をパラメータとして取ります。 myArrayパラメータは3,2,3になるので、関数は3つのパラメータを取るように動作します。

関連する問題