`reduce`方法

时间:2016-10-12 23:23:35

标签: javascript arrays reduce

我刚刚学习了reduce的功能。这非常有用。最近我在一个字符串数组上使用它来自动为我生成一系列输出。我想转过这样的话:

miscArray = ["dog", "cat", "hamster"]

成像:

miscString =
"\nYou have a dog.
\nYou have a cat.
\nYou have a hamster."

但是,reduce不会将其函数应用于数组的第一次迭代。如果我的代码看起来像这样:

function outputString(x,y){
  return x+"\nYou have a "+y+".";
}

miscArray = ["dog", "cat", "hamster"]

alert(miscArray.reduce(outputString));

我最终得到这样的东西:

"dog
\nYou have a cat.
\nYou have a hamster."

作为一种解决方法,我一直在数组的开头使用空字符串,如下所示:miscArrray = ["","dog", "cat", "hamster"]。但是,使用解决方法只意味着我不知道如何正确地做事。我正在考虑制作我自己的reduce()方法的变体,但是如果有正确/更好的方法来做到这一点。我宁愿这样做。

2 个答案:

答案 0 :(得分:4)

肯定有:

您需要指定累加器的初始值。在您的情况下,它是''(空字符串)。

function outputString(x,y){
  return x+"\nYou have a "+y+".";
}

miscArray = ["dog", "cat", "hamster"]

alert(miscArray.reduce(outputString, ''));

当设置累加器的初始值时,它将作为第一个迭代的第一个参数与第一个数组项一起作为第二个参数传递,依此类推。

始终显式设置累加器实际上是一个好习惯,因为那时表达式的输入变得更加明显和清晰。

答案 1 :(得分:3)

在这种情况下,请勿使用PowerShell。使用以下内容:

reduce