【问题标题】:how to use switch statment如何使用switch语句
【发布时间】:2021-02-28 09:45:34
【问题描述】:

我是 JS 新手,我读到了 switch 语句。我不知道怎么用 我有一个练习要完成。 得到一个编号为 1-10 的数组,结果需要包含“一”、“二”、“三”之类的词。 这就是我到目前为止得到的:

function sayNum(){
    let nameNumber = [1,2,3,4,5,6,7,8,9,10]
    let text = '';
    for(let i=0;i<nameNumber.length;i++){
    switch(numbers) {
        case "1":
            text = "one";
            break;
        case "2":
            text = "two";
            break;
        case "3":
            text = "three";
            break;
        case "4":
            text='four';
            break;
        case "5":
            text = "five";
            break;
        case "6":
            text = "six";
            break;
        case "7":
            text = "seven";
            break;
        case "8":
            text = "eight";
            break;
        case "9":
            text = "nine";
            break;
        case "10":
            text = "ten";
    }
    }
    return text;
}
sayNum()

【问题讨论】:

  • 与其使用switch,不如考虑一个具有['one', 'two', ..., 'ten'] 值的数组并按数字(-1) 对其进行索引...
  • 一堆问题:1. numbers 未定义并导致脚本失败 2. text 在 for 循环内被覆盖,因此 switch 块的结果对于所有数字都被丢弃,但最后 3. 程序不产生任何输出。固定:jsfiddle.net/yu74tno8

标签: javascript arrays switch-statement


【解决方案1】:

你可以这样做,例如:

function sayNum(){
  let numbers = [1,2,3,4,5,6,7,8,9,10];
  let result = [];

  for(let i=0;i<numbers.length;i++) {
    switch(numbers[i]) {
        case 1:
            text = "one";
            break;
        case 2:
            text = "two";
            break;
        case 3:
            text = "three";
            break;
        case 4:
            text = "four";
            break;
        case 5:
            text = "five";
            break;
        case 6:
            text = "six";
            break;
        case 7:
            text = "seven";
            break;
        case 8:
            text = "eight";
            break;
        case 9:
            text = "nine";
            break;
        case 10:
            text = "ten";
            break;
    }

    result.push(text);
  }

  return result;
}

let namedNumbers = sayNum();
console.info(namedNumbers);

这将:

  • 将文本值添加到数组中,表示源数组中的每个数字
  • 将结果数组返回给调用者
  • 将结果记录到console

【讨论】:

  • ...这仍然是一种非常冗长且效率低下的数组转换方式,但我明白了,它是用于非现实生活中的练习:)
  • ... 并且对于寻找清晰事物的人来说:)
【解决方案2】:

在 switch 语句中,您将“表达式”传递给 switch 语句。表达式本身可以是字符串、数字、浮点数、布尔值等。现在,将表达式与每个 case 子句进行比较。这是一个 'strict' 比较。这就是您的代码无法正常工作的原因。

首先,您传递了一个未声明的变量“数字”作为 switch 表达式。相反,您应该像这样传递nameNumber[i] 数组的ith 元素:switch(nameNumber[i]){ }

其次,在每个 case 子句中,您都将值与“1”、“2”之类的字符串进行比较。但是 switch 表达式使用严格相等 === 运算符进行比较,因此当您的 nameNumber 数组包含数字而不是字符串时,您的“case”子句也应该包含数字而不是字符串。这意味着case 1: 而不是case "1":

您可以在此处阅读有关switch-case 的更多信息:Switch Statement

我已经通过上面提到的更改修复了您的代码。请运行下面的代码 sn-p 看看它是如何工作的。祝你好运!

function sayNum(){
    let nameNumber = [1,2,3,4,5,6,7,8,9,10]
    let text = '';
    for(let i=0;i<nameNumber.length;i++){
    switch(nameNumber[i]) {
        case 1:
            text = "one";
            break;
        case 2:
            text = "two";
            break;
        case 3:
            text = "three";
            break;
        case 4:
            text='four';
            break;
        case 5:
            text = "five";
            break;
        case 6:
            text = "six";
            break;
        case 7:
            text = "seven";
            break;
        case 8:
            text = "eight";
            break;
        case 9:
            text = "nine";
            break;
        case 10:
            text = "ten";
    }
    console.log(text);
    }
    return text;
}

sayNum();

【讨论】:

  • 嘿 :) 你的解释很棒。非常感谢你!
【解决方案3】:

使用 if 语句,而不是使用 switch。因为在switch中,break语句可以用来跳出循环。

let text = '';

function sayNum() {
  let nameNumber = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  
  
  for (let i = 0; i < nameNumber.length; i++) {
    if(nameNumber[i] == 1){
    text += `"one",`;
    
    }
    if(nameNumber[i] == 2){
      text += `"two",`;
    }
    if(nameNumber[i] == 3){
      text += `"three",`;
    }

    if(nameNumber[i] == 4){
      text += `"four",`;
    }

    if(nameNumber[i] == 5){
      text += `"five",`;
    }

    if(nameNumber[i] == 6){
      text += `"six",`;
    }

    if(nameNumber[i] == 7){
      text += `"seven",`;
    }

    if(nameNumber[i] == 8){
      text += `"eight",`;
    }

    if(nameNumber[i] == 9){
      text += `"nine",`;
    }

    if(nameNumber[i] == 10){
      text += `"ten"`;
    }

    
  }
  
}

sayNum();

console.log(text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2020-09-01
    相关资源
    最近更新 更多