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

如何正确实现removeVowelKeys函数:过滤非元音开头的字符串数组

修正后的removeVowelKeys函数实现

你的代码存在几个关键问题,直接导致结果不符合预期:

  • 循环边界错误:i<=keys.length会让循环多执行一次,访问keys[keys.length](数组越界,值为undefined),应该改成i < keys.length。
  • 判断逻辑错误:用||连接不等于判断永远为true(一个字符不可能同时等于所有元音),而且完全没处理大写元音的情况,比如'Advice'这类以大写元音开头的字符串根本没被过滤。

下面是修正后的代码,同时优化了逻辑,让代码更简洁易读:

function removeVowelKeys(keys) {
  // 定义大小写不敏感的元音集合,转成小写统一判断
  const vowels = new Set(['a', 'e', 'i', 'o', 'u', 'y']);
  return keys.filter(key => {
    // 取首字符转小写,判断是否不在元音集合中
    const firstChar = key[0].toLowerCase();
    return !vowels.has(firstChar);
  });
}

// 测试示例
console.log(removeVowelKeys(['alarm', 'chip', 'isValid', 'Advice', 'onClick'])); // ['chip']

如果坚持用for循环的写法,修正后的版本如下:

function removeVowelKeys(keys) {
  let result = [];
  const vowels = {'a': true, 'e': true, 'i': true, 'o': true, 'u': true, 'y': true};
  for (let i = 0; i < keys.length; i++) {
    const firstChar = keys[i][0].toLowerCase();
    // 判断首字符转小写后不在元音对象中
    if (!vowels[firstChar]) {
      result.push(keys[i]);
    }
  }
  return result;
}

核心改进点:

  • 统一将首字符转为小写,解决大小写不敏感的问题
  • 用集合/对象存储元音,判断逻辑更清晰高效
  • 修正循环边界,避免数组越界
  • 调整判断逻辑,确保只有不以元音开头的字符串才被保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:57:17