Javascript 减少功能不工作

Javascript Reduce Function Not working

我正在尝试使用高阶函数,试图成为更好的 javascript 开发人员。

我从下面的代码中得到的错误是 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?

您想使用 .call instead of .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
*/

而不是使用

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

使用

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

因为 function.prototype.apply 方法将数组的每个项目作为参数。 myArray 参数变为 3、2、3,因此它的行为就像您的函数采用 3 个参数一样。