【问题标题】:Switch statement returning undefinedSwitch 语句返回未定义
【发布时间】:2019-10-20 02:11:32
【问题描述】:
function getLetter(s) {
    let letter = s[0];
    // Write your code here
    let A = ['a','e','i','o','u'];
    let B = ['b','c','d','f','g'];
    let C = ['h','j','k','l','m'];
    let D = ['n','p','q','r','s','t','v','w','x','y','z'];

  switch(letter) {
    case A.includes(s.charAt(0)): 
      return 'A';
    break;

    case B.includes(s.charAt(0)): 
      return 'B';
    break;

    case C.includes(s.charAt(0)): 
      return 'C';
    break;

    case D.includes(s.charAt(0)): 
        return 'D';
    break;
  }
}

s = 'adam';
t = getLetter(s);
console.log(t);

我正在学习开关,我正在尝试这个问题,我应该传入一个字符串,如果字符串的第一个字母是任何元素,函数 getLetter() 应该返回“A”在数组 A 中。与数组 B、C、D 类似。我尝试了上面的代码,但它返回未定义。我做错了什么?

【问题讨论】:

标签: javascript


【解决方案1】:

您需要检查一个布尔值,例如true,因为您使用includes,它返回truefalse

顺便说一句,通过在每个case 中使用return,您可以省略break,因为函数以return 退出,而switch statement 也退出。

function getLetter(s) {
    let letter = s[0];
    // Write your code here
    let A = ['a', 'e', 'i', 'o', 'u'];
    let B = ['b', 'c', 'd', 'f', 'g'];
    let C = ['h', 'j', 'k', 'l', 'm'];
    let D = ['n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'];

    switch (true) { // <-- boolean value with strict comparison ===
        case A.includes(letter):
            return 'A';
        case B.includes(letter):
            return 'B';
        case C.includes(letter):
            return 'C';
        case D.includes(letter):
            return 'D';
    }
}

var s = 'adam',
    t = getLetter(s);

console.log(t);

【讨论】:

  • 谢谢。当我使用 if 语句执行此操作时,它运行良好:``` if(A.includes(s.charAt(0))) { return 'A'; };``` 如果我想要一个条件为假,我是否必须为假条件编写另一个 switch 语句,或者只在 switch 外部和函数内部返回一个默认参数?
  • 在 case 子句中,您可以用 logical NOT ! 否定该值。
【解决方案2】:

您可以使用find 而不是includes,当您将一个字符传递给switch() 时,它会尝试将其与大小写进行匹配,因为includes 返回true/false,因此它不会匹配任何大小写

function getLetter(s) {
  let letter = s[0];
  let A = ['a', 'e', 'i', 'o', 'u'];
  let B = ['b', 'c', 'd', 'f', 'g'];
  let C = ['h', 'j', 'k', 'l', 'm'];
  let D = ['n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'];

  switch (letter) {
    case A.find(v => v === letter):
      return 'A';
    case B.find(v => v === letter):
      return 'B';
    case C.find(v => v === letter):
      return 'C';
    case D.find(v => v === letter):
      return 'D';
  }
}

s = 'adam';
t = getLetter(s);
console.log(t);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多