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();
关键修改说明
修正
isVowel函数:- 移除了返回字符串的错误逻辑,确保无论输入什么都返回布尔值,避免
filter处理时的意外行为。 - 用
includes替代indexOf,代码更简洁易读。
- 移除了返回字符串的错误逻辑,确保无论输入什么都返回布尔值,避免
优化字符处理:
- 使用
replace(/\s/g, '')一次性移除所有空格,比split(' ').join('')更高效且语义清晰。
- 使用
修复排序逻辑:
- 原排序回调函数逻辑完全错误:当
a === b时返回1会导致相同元素被交换位置,否则返回0意味着不执行排序,自然无法实现集中排列。 - 改用
localeCompare方法,基于字母顺序比较字符的小写形式,确保大小写元音(如A和a)被视为同一类并集中排列,最终输出符合预期的[a,a,e,e]。
- 原排序回调函数逻辑完全错误:当
内容的提问来源于stack exchange,提问作者Zero Gear
相关产品推荐
相关产品推荐

