Как вернуть в строку как строчные, так и прописные гласные?

1

Я пытаюсь написать функцию, которая принимает строку 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"); // ""
Теги:
string

2 ответа

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")); // ""
  • 0
    Спасибо! При этом нам то, что я изначально думал, но не реализовал. Ценим помощь
  • 0
    @ user3166915 Добро пожаловать!
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") // ""
);
  • 0
    Вау, это можно было бы решить в одной строке кода? Я освежил свои регулярные выражения! Спасибо за это!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню