You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的去元音函数无法移除元音,仅返回原字符串?

问题分析与解决

你的代码存在两个核心问题,导致无法正确移除字符串中的元音:

  1. forEach循环内的赋值无法修改原数组
    forEach遍历中的letter是数组元素的副本,给letter = ""只是修改了这个临时变量,原数组strArray里的对应元素完全没变化,自然最终拼接后还是原字符串。

  2. 元音大小写匹配逻辑错误
    你的vowels数组全是小写字母,vowels[i].toLowerCase()结果还是小写,根本匹配不到大写的元音(比如'A'、'E'),这些大写元音会被保留下来。

修正方案一:使用map生成处理后的新数组(推荐)

map方法可以直接返回每个元素处理后的结果,生成新数组后再拼接:

function disemvowel(str) {
  const vowels = ['a', 'i', 'o', 'u', 'e'];
  return str.split('').map(letter => {
    // 将当前字母转为小写,判断是否属于元音
    if (vowels.includes(letter.toLowerCase())) {
      return '';
    }
    return letter;
  }).join('');
}

修正方案二:通过forEach的索引修改原数组

如果坚持要用forEach,需要通过索引直接操作原数组元素:

function disemvowel(str) {
  const vowels = ['a', 'i', 'o', 'u', 'e'];
  const strArray = str.split('');
  
  strArray.forEach((letter, index) => {
    if (vowels.includes(letter.toLowerCase())) {
      strArray[index] = '';
    }
  });
  
  return strArray.join('');
}

更简洁的方案:正则表达式替换

用正则一次性匹配所有大小写元音并替换为空,代码最简洁:

function disemvowel(str) {
  // [aeiou]匹配元音,g表示全局替换,i表示忽略大小写
  return str.replace(/[aeiou]/gi, '');
}

内容的提问来源于stack exchange,提问作者user20907202

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:52:05