Задать вопрос
@StepanMogilyov

Как узнать индекс гласных в слове?

Где ошибка в задаче?

function words(arg1) {
  let letters = 'АаЕеIiOoUuYy'  //Создал переменную со строкой с гласными
  let newArr = [] //Создал пустой массив, в который буду пушить индексы гласных в слове
  for (let i = 0; i < arg1.length; i++)  //Пробегаю циклом по переданному в аргумент слову
  for (let j = 0; j < letters.length; j++) {  //Затем пробегаю по переменной с гласными
    if (arg1[i] == letters[j]) {  //Если элемент слова равен элементу строки с согласными
  newArr.push(arg1[i].indexOf())  //То пушу в массив индексы гласных этого слова
    }
  }
  
  return newArr //Возвращаю массив
}
console.log(words('Apple'))
  • Вопрос задан
  • 733 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
let letters = 'АаЕеIiOoUuYy'  //Создал переменную со строкой с гласными

Почему символы из разных алфавитов? - первые четыре кириллические.

if (arg1[i] == letters[j]) {  //Если элемент слова равен элементу строки с согласными
  newArr.push(arg1[i].indexOf())  //То пушу в массив индексы гласных этого слова
}

Зачем тут indexOf (кстати, вы не знаете, что он делает, откройте документацию и разберитесь)? Что является индексом проверяемого символа? Строчкой выше ещё помнили, а когда до push'а дело дошло, уже забыли? Просто .push(i).

Не ошибка, но упомянуть косячок стоит - после найденного совпадения продолжать крутить внутренний цикл смысла нет. Гуглите, как прервать цикл.

Ну и это, как ещё можно сделать:

const getVowelsIndexes = str =>
  Array.from(str.matchAll(/[aeiouy]/gi), n => n.index);

или

const getVowelsIndexes = ((vowels, str) =>
  Array.prototype.reduce.call(
    str.toLowerCase(),
    (acc, n, i) => (vowels.has(n) && acc.push(i), acc),
    []
  )
).bind(null, new Set('aeiouy'));

или

const getVowelsIndexes = str => Object
  .entries(str)
  .filter(n => 'AaEeIiOoUuYy'.includes(n[1]))
  .map(n => +n[0]);

или

const getVowelsIndexes = str =>
  eval(`[${[...str]
    .map((n, i) => /a|e|i|o|u|y/i.test(n) ? `${i},` : '')
    .join('')
  }]`);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы