Switch语句没有返回值

4

我第一次使用 switch,但是我在返回内容方面遇到了一些问题。作为测试,我正在取一个字符串,并根据被测试的字符,将一些字符串输出记录到控制台中。

function pairElement(str) {
switch (str) {
    case "A":
    console.log("some things")
    break;
    case "G":
    console.log("some more things")
    break;
}
}
pairElement("ACG"); 

这些案例的值类型相同,所以我不确定我做错了什么。非常感谢任何帮助。

3
它没有返回,是因为“ACG”不等于“A”或“G”。开关需要使用精确匹配。 - Get Off My Lawn
Switch通过===(严格比较)匹配每个case。 - Andrew Li
你期望得到什么? - Jonas Wilms
4个回答

6

根据您在switch语句中处理的值,您的测试无效。您只处理了AG的情况,但您传递了ACG。如果没有任何一个指定的情况匹配,并且您还缺少默认情况,那么Switch将无法执行。如果:

function pairElement(str) {
switch (str) {
    case "A":
    console.log("some things")
    break;
    case "G":
    console.log("some more things")
    break;
}
}
pairElement("A"); // some things - valid
pairElement("G"); // some more things - valid
pairElement("ACG"); // switch case and no default - NOT valid

添加一个默认值会给你:

function pairElement(str) {
switch (str) {
    case "A":
    console.log("some things")
    break;
    case "G":
    console.log("some more things")
    break;
    default:
    console.log("something ELSE")
}
}
pairElement("A"); // some things  - valid
pairElement("G"); // some more things - valid
pairElement("ACG"); // something ELSE - valid

现在还有一个问题,当你测试多个字符的字符串和单个字符的字符串时,你到底是期望什么结果呢?在你的 switch 语句中处理单个字符有点让人感到困惑,因为这似乎表明你期望传递给函数的字符串是一个一个字符进行测试的,如果是这样的话,请明确说明,因为这就改变了问题/要求。

针对您需要逐个字符测试的情况进行更新:

function pairElement(str) {
 str.split('').forEach(function(v) {
  switch (v) {
   case "A":  
   console.log("some things")
   break;
   case "G":
   console.log("some more things")
   break;
   default:
   console.log("something ELSE")
  }
 }
)
}
pairElement("ACG"); 
// some things
// something ELSE
// some more things


我没有考虑到switch将单词视为一个单独的元素。为了将某些字符推入数组,我需要拆分单词并迭代每个字符(可能使用filter等)。 - Pbculley
我更新了我的答案,加入了逐个字符的情况。希望这有所帮助。 - Akrion

4

由于您输入了“ACG”,而这不属于任何一个情况,因此应添加一个default case。在任何编程语言中,switch都需要匹配的情况。

演示

function pairElement(str) {
switch (str) {
    case "A":
    console.log("some things")
    break;
    case "G":
    console.log("some more things")
    break;
    default:
    console.log("some things + some more things")
}
}
pairElement("ACG"); 

 


该字符串可以使用 split 方法,然后循环遍历每个字母。 - Get Off My Lawn
是的,我的想法是通过循环并使用split访问每个字符,可能利用filter或类似的东西来推到最终数组。现在我明白JS将单词视为单个元素,如果我不使用“split”进一步拆分成单个字符,则代码将无法正常工作。 - Pbculley

2

您正在传递一个长度为三的字符串,第一件要修改的是它。第二个是必须放置一个默认评估,以防任何情况匹配您当前所需的条件。

function pairElement(str) {
    switch (str) {
        case "A":
            console.log("some things");
            break;
        case "G":
            console.log("some more things");
            break;
        default:
            console.log("default");
            break;
     }
}

请查看MDN Switch信息。


1

Switch使用严格比较(===,换句话说必须完全匹配),因此在这种情况下,“ACG”与“A”或“G”不完全匹配,由于没有完全匹配,因此switch不执行任何操作。

添加一个针对“ACG”的case,以便在传递“ACG”时使switch执行某些操作。您还可以添加一个默认case,如果没有其他匹配项,则switch将执行该case:

function pairElement(str) {
  switch (str) {
    case "A":
      console.log("some things")
      break;
    case "G":
      console.log("some more things")
      break;
    case "ACG":
      console.log("ACG exactly matches this case")
      break;
    default:
      console.log("nothing matched so default executed");
      break;
  }
}

pairElement("A"); // some things
pairElement("G"); // some more things
pairElement("ACG"); // ACG exactly matches this case
pairElement("this won't match anything"); // nothing matched so default executed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接