0

如果我有“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);
}
4

2 回答 2

1

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

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);
}

于 2021-02-14T04:24:41.530 回答
0

你可以做某事

console.log(test("google crhome great"))
function test(e){
  var words = e
    .toLowerCase() // for better compare and sort
    .split("") // convert string to array
    .filter(el => el !== " ") // remove spaces
    
  var vowel = words
    .filter(el => "aiueo" // to find vowel letters
        .split("") // to create vowel letter array
        .includes(el)
    ).sort((a,b) => 
      a.localeCompare(b) // sort from a to z. you can replace a with b and b with a for reverse sorting
    ).join('') // to convert array to string
    
  var consonant = words
    .filter(el => !"aiueo"
        .split("")
        .includes(el)
    ).sort((a,b) => 
      a.localeCompare(b)
    ).join('')
    
  return {vowel, consonant}
}

于 2021-02-14T05:41:48.420 回答