2016-08-11 102 views
0

我正在尝试使用更高阶的函数,试图成为更好的JavaScript开发人员。Javascript Reduce Function not working

我从下面的代码中得到的错误是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我正在尝试使用apply,arrow函数和减少模式。 –

回答

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个参数一样。