如何同时返回大写和小写的元音?

时间:2019-01-11 00:41:42

标签: javascript string

我正在尝试编写一个接受字符串str并返回仅包含str中元音的新字符串的函数。

编写此函数时,我将通过所有测试,除非字符串具有大写的元音,因为一个测试用例要求我通过带有大写和小写字母的元音。

vowelsOnly(“喊出来”); //“ OUiou”

我想念东西吗?

    const vowelsOnly = function (str) {
      let vowels = ['a','e','i','o','u']
      let newStr = ''
      for (let i of str.toLowerCase()) {
        if(vowels.includes(i)) {
           newStr += i
        }
      }
      return newStr
    }

vowelsOnly("hello world"); // "eoo"
vowelsOnly("happy birthday to you"); // "aiaoou"
vowelsOnly("SHOUT it out"); // "OUiou"
vowelsOnly("aieeeeeeeeou"); // "aieeeeeeeeou"
vowelsOnly("nvwlsnlycnsnnts"); // ""

2 个答案:

答案 0 :(得分:2)

您只需要更新逻辑,以便在迭代内而不是之前调用toLowerCase()

for (let i of str) { // Remove toLowerCase() from this line

    if(vowels.includes(i.toLowerCase())) { // Place toLowerCase() here

       newStr += i // The character "i" retains original case
    }
} 

这意味着您不对返回的数据进行变异,这将保留结果中的框:

const vowelsOnly = function(str) {
  let vowels = ['a', 'e', 'i', 'o', 'u']
  let newStr = ''
  for (let i of str) {
    if (vowels.includes(i.toLowerCase())) {
      newStr += i
    }
  }
  return newStr
}

console.log(vowelsOnly("hello world")); // "eoo"
console.log(vowelsOnly("happy birthday to you")); // "aiaoou"
console.log(vowelsOnly("SHOUT it out")); // "OUiou"
console.log(vowelsOnly("aieeeeeeeeou")); // "aieeeeeeeeou"
console.log(vowelsOnly("nvwlsnlycnsnnts")); // ""

答案 1 :(得分:1)

另一种选择是使用正则表达式-匹配不是元音的任何字符,并替换为空字符串:

const vowelsOnly = str => str.replace(/[^aeiou]/gi, '');

console.log(
  vowelsOnly("hello world"), // "eoo"
  vowelsOnly("happy birthday to you"), // "aiaoou"
  vowelsOnly("SHOUT it out"), // "OUiou"
  vowelsOnly("aieeeeeeeeou"), // "aieeeeeeeeou"
  vowelsOnly("nvwlsnlycnsnnts") // ""
);