`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("")
我最近才了解 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("")