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

JavaScript中提取字符串元音后如何排序得到同字母集中的数组?

如何修正JavaScript元音排序函数,实现相同元音集中排列

你的代码核心问题在于排序回调函数逻辑错误,当前逻辑不仅无法实现字母排序,反而会打乱原有顺序。另外isVowel函数存在返回非布尔值的隐患,需要一并修正。

修正后的完整代码

const prompt = require('prompt-sync')();

const isVowel = (c) => {
    // 始终返回布尔值,空字符或非元音返回false
    if (!c) return false;
    return ['a', 'e', 'i', 'o', 'u'].includes(c.toLowerCase());
};

const sortChar = () => {
    const wordsInput = prompt("Input one line of word(s): ");
    // 用正则替换空格更简洁,避免多次split/join操作
    const chars = wordsInput.replace(/\s/g, '').split('');
    const vowels = chars.filter(isVowel);
    
    // 修正排序逻辑:按小写字母顺序排序,确保大小写元音归为一类
    vowels.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
    
    console.log(vowels);
};

sortChar();

关键修改说明

  1. 修正isVowel函数:

    • 移除了返回字符串的错误逻辑,确保无论输入什么都返回布尔值,避免filter处理时的意外行为。
    • 用includes替代indexOf,代码更简洁易读。
  2. 优化字符处理:

    • 使用replace(/\s/g, '')一次性移除所有空格,比split(' ').join('')更高效且语义清晰。
  3. 修复排序逻辑:

    • 原排序回调函数逻辑完全错误:当a === b时返回1会导致相同元素被交换位置,否则返回0意味着不执行排序,自然无法实现集中排列。
    • 改用localeCompare方法,基于字母顺序比较字符的小写形式,确保大小写元音(如A和a)被视为同一类并集中排列,最终输出符合预期的[a,a,e,e]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:55:17