`reduce` 方法的高级用法

Advanced usage of the `reduce` method

我最近才了解 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() 方法变体,但如果有 right/better 方法可以做到这一点。我宁愿那样做。

肯定有:

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

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

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

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

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

ALWAYS 显式设置累加器实际上是一个好习惯,这样表达式的输入就变得更加明显和清晰。

在这种情况下不要使用 reduce。使用以下内容:

miscArray.map(x => "\nYou have a "+ x +".").join("")