JS switch 语句有时有效

JS switch statement works only sometimes

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

No offense but,\nYour writing is among the worst I've ever read

应该变成

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;
}

数组长度在每 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")
);