【问题标题】:JS switch statement works only sometimes [duplicate]JS switch 语句仅在某些时候有效[重复]
【发布时间】:2022-01-01 02:56:01
【问题描述】:

我正在编写一个从 str 参数中删除元音的程序,我决定使用 switch 语句来实现这个目标。 我很不擅长解释东西,所以我给你举个例子:

无意冒犯,\n你的作品是我读过的最糟糕的作品之一

应该变成

N ffns bt,\nYr wrtng s mng th wrst 'v vr rd

但我的输出是这样的:

N ffns bt,\nYur wrtng s mng th wrst 'v vr rad

程序出于某种原因决定离开“u”和“a”。在寻找原因将近 1.5 小时后,我放弃了,因为我根本不知道自己做错了什么。

function disemvowel(str) {
  let arr = str.split(''); // str -> arr
  for (let x = 0; x <= arr.length; x++) { // remove vowels
    switch(arr[x]) {
      case "a":
      case "e":
      case "i":
      case "o":
      case "u":
      case "A":
      case "E":
      case "I":
      case "O":
      case "U":
        arr.splice(x, 1);
        break;  
    }
  }
  str = arr.join([separator = '']) // arr -> str
  return str;
}

【问题讨论】:

  • 尝试向后运行循环,这是遍历变异结果时的典型错误。
  • 附带说明,JavaScript 没有命名参数。 [separator = ''] 将评估为 ''(由于参数被转换为字符串)。直接使用arr.join('')即可。

标签: javascript arrays switch-statement


【解决方案1】:

数组长度在每个splice 之后都会发生变化。您可以先定义length,然后在每次删除项目时递减x

function disemvowel(str) {
  let arr = str.split(''); // str -> arr
  const length = arr.length;
  for (let x = 0; x < length; x++) { // remove vowels
    switch(arr[x]) {
      case "a":
      case "e":
      case "i":
      case "o":
      case "u":
      case "A":
      case "E":
      case "I":
      case "O":
      case "U":
        arr.splice(x, 1);
        x--;
        break;  
    }
  }
  str = arr.join([separator = '']) // arr -> str
  return str;
}

console.log(
  disemvowel("No offense but,\nYour writing is among the worst I've ever read")
);

【讨论】:

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