2016-08-11 6 views
0

Ich versuche, mit Funktionen höherer Ordnung zu arbeiten, in einem Versuch, ein besserer JavaScript-Entwickler zu sein.Javascript Reduce Funktion funktioniert nicht

Der Fehler, den ich aus dem folgenden Code erhalte, ist TypeError: myArray.reduce is not a function Ich schwöre, ich folge dem richtigen Designmuster.

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

Warum nicht einfach 'var myObject = myFunction (myArray);'? – Arnauld

+0

Welchen Browser/welche Version verwenden Sie? Ich weiß, wir haben gesehen, dass Chrome 44 nicht unterstützt => aber 47 oder 48 tat. – klog

+0

@Arnauld Ich versuche, mit Anwenden, Pfeilfunktionen zu arbeiten und Muster zu reduzieren. –

Antwort

4

Sie wollen .call statt .apply verwenden.

.call werden in jedem Objekt übergeben und übergeben sie direkt an die Funktion, während .apply wird ein Array von Parametern und übergeben sie als jede separate Variable.

Sie die Auswirkungen sehen können, mit diesem einfachen Skript:

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

Alternativ, 'myFunction.apply (myObject, [myArray])'. – melpomene

+0

Sieht so aus, als müsste ich noch mehr lesen! –

+0

@ChrisClark mehr lesen -> http://stackoverflow.com/questions/1986896/what-is-the-difference-between-call-and-apply – aw04

1

Statt mit

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

Verwenden

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

Da die Methode function.prototype.apply die einzelnen Elemente des Arrays als Parameter akzeptiert. myArray-Parameter wird 3, 2, 3, also verhält es sich wie Ihre Funktion hat 3 Parameter.

Verwandte Themen