我有一个函数可以从字符串中删除元音,然后返回该字符串. 我的问题是,如果有两个或两个以上的连续元音,它只会删除其中一个.我可以运行两次‘for’循环来解决问题,但这似乎不正确.有什么我可以改变的吗?

let string = "I'd always thought lightning was something only I could see.";
let vowels = ['a', 'e', 'i', 'o', 'u']

function removeVowels(str) {
  let stringArray = str.split('');
  for (let letter of stringArray){
    if (vowels.includes(letter.toLowerCase())){
      let index = stringArray.indexOf(letter); 
      stringArray.splice(index, 1);
    }
  }
  return stringArray.join('');
}

返回:

"'d lwys thught lghtnng ws smthng nly  culd se."

推荐答案

向前迭代时,拼接将数组的下一个元素向后移位到迭代索引下;然后递增索引将丢失该元素.

它在几个方面是可以修复的,但对您的方法造成的损害最小,只需反向迭代字母,这样迭代和删除就不会相互干扰……

let string = "I'd always thought lightning was something only I could see.";
let vowels = ['a', 'e', 'i', 'o', 'u'];

function removeVowels(str) {
  let stringArray = str.split('');
  for (let i=stringArray.length-1; i>=0; i--){
    let letter = stringArray[i];
    if (vowels.includes(letter.toLowerCase())){
      stringArray.splice(i, 1);
    }
  }
  return stringArray.join('');
}

console.log(removeVowels(string))

因为我们遍历索引,所以一个附带的好处是我们不必搜索indexOf()的array.

Javascript相关问答推荐

使用续集和下拉栏显示模型属性

Redux查询多个数据库Api reducerPath&

使用useEffect,axios和useParams进行react测试

切换时排序对象数组,切换不起作用

无法检测卡片重叠状态的问题

VUE 3捕获错误并呈现另一个组件

未加载css colored颜色 ,无法将div设置为可见和不可见

如何在箭头函数中引入or子句?

Reaction组件在本应被设置隐藏时仍显示

变量在导入到Vite中的另一个js文件时成为常量.

钛中的onClick事件需要在两次点击之间等待几秒钟

为什么延迟在我的laravel项目中不起作用?

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

JavaScript -复制到剪贴板在Windows计算机上无效

如何在FiRestore中的事务中使用getCountFromServer

使用API调用的VUE 3键盘输入同步问题

有没有办法在R中创建一张具有多个色标的热图?

在AgGrid中显示分组行的单元格值

CSS网格使页面自动滚动

观察子组件中的@Output事件emits 器?