我试图弄清楚如何将两个不同的条件应用于switch语句中的一个输出。我有一个函数,根据第二个参数得到的参数来设置字符串的样式。第一个和第二个输出是可以的,因为它只有一个样式参数,但第三个输出有。我找不到一种方法来同时应用大写和反转样式到字符串。我'我试图循环一个switch语句。我想知道是否有什么好的解决方法。
function caseStyle(string, style) {
function toUpper(string) {
string = string.toUpperCase();
return string;
}
function toReversed(string) {
string = string.split("").reverse().join("");
return string;
}
switch (style) {
case "upper":
string = toUpper(string);
break;
case "reversed":
string = toReversed(string);
break;
}
return string;
}
console.log(caseStyle("hello", "upper")); //output: HELLO
console.log(caseStyle("hello", "reversed")); //output: olleh
console.log(caseStyle("hello", ["upper", "reversed"])); // expected output: OLLEH
5条答案
按热度按时间iugsix8n1#
您需要检查
style
是否为数组,并进行相应的处理或者,将其强制为数组
style = [style].flat()
,然后迭代该数组在传入数组的情况下,
.flat()
将展平数组如下
wgmfuz8q2#
可以按以下方式使用
switch (true)
:bvn4nwqk3#
除了这里一些中肯的答案...
我会提出一个不同的方法:
toUpper
和toReversed
移到caseStyle
函数之外,没有必要将它们放在那里str = str...
,然后在开关情况下再次执行methods
的Object中-并将函数命名为与其字符串名称完全相同的名称-referencesif
语句中,而是将第二个数组(btw,重命名为styles
,复数)转换为Array,使其始终为Array。此外,通过使用.split(/\W+/)
(由一个或多个非单词字符分隔),现在还可以传递类似"upper,reversed"
的字符串methods
,并且可以在任何时间点添加更多的methods
,并且可以在将来使用您可用的预期方法(转换)名称,例如:caseStyle("hello", ["snake", "capitalize", "reverse"])
或更大。正如你从上面注意到的,我使用了preferredstring Spread语法
[...str]
来将String转换为Array,当在一个使用多个码位来表示字形的字符串上使用.split("")
时,可能会遇到问题,例如:表情符号:使用
.split("")
时出现问题将给予:
["a","b","�","�","�","�"]
更好的字符串拆分:使用跨页语法:
如你所见,表情符号被正确地分割和保存。
fruv7luv4#
为什么不运行一个简单的for循环呢?你还需要检查输入是否不是数组,如果不是,就把它转换成数组。
xghobddn5#
总体上我可能不会采用这种方法,但这可能适合您当前的方案;特别是当您控制传递给这些函数的输入“样式”时。