首页 > 解决方案 > 如何按先出现的字母对元音和辅音进行排序并删除“空格”

问题描述

如果我有“google chrome great”,则输出元音是“oooeeea”,辅音是“ggglchrrt”。我试试这段代码,但输出是“test.js:26 ooeoeea”

test("google crhome great")
function test(e){
    var words = e.split("");
    var vowels = "AIUEOaiueo";
    var vowel = "";
    
    for(var i = 0; i < e.length; i++){
        if(vowels.includes(e[i])){
            if(e[i] == 'a' || e[i] == 'A'){
                vowel += e[i];
            }
            if(e[i] == 'i' || e[i] == 'I'){
                vowel += e[i];
            }
            if(e[i] == 'u' || e[i] == 'U'){
                vowel += e[i];
            }
            if(e[i] == 'e' || e[i] == 'E'){
                vowel += e[i];
            }
            if(e[i] == 'o' || e[i] == 'O'){
                vowel += e[i];
            }
            
        }
    }
    console.log(vowel);
}

标签: javascriptarrays

解决方案


要正确排序这些值,请考虑将它们放在一个对象上,按字母索引。在每次迭代中,连接到(或创建)属性。最后,获取对象的值。

test("google crhome great")
function test(e){
    const letters = {};
    for (const letter of e) {
      if (/[aeiou]/i.test(letter)) {
        letters[letter] = (letters[letter] || '') + letter;
      }
    }
    const vowels = Object.values(letters).join('');
    console.log(vowels);
}

这是有效的,因为它会遍历字符串来构造一个像

{
  o: 'ooo',
  e: 'eee',
  a: 'a',
}

然后您只需将这些值连接在一起即可获得您的字符串。

在正则表达式中使用字符集来保持元音测试的简洁。

如果你也需要辅音:

test("google crhome great")
function test(e){
    const vs = {};
    const cs = {};
    for (const letter of e.replaceAll(' ', '')) {
      const obj = /[aeiou]/i.test(letter) ? vs : cs;
      obj[letter] = (obj[letter] || '') + letter;
    }
    const vowels = Object.values(vs).join('');
    const consonants = Object.values(cs).join('');
    console.log(vowels, consonants);
}


推荐阅读