我正在尝试编写一个接受字符串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"); // ""
答案 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") // ""
);