Если встречается согласная буква, то пропускать одну позицию в строке, если встречается гласная - то две.
В итоге должно получится слово hello
. Проблема в том, что значение в pos
после первого раза не меняется, как это поправить?
var str = "hieeelalaooo"; //строка
var vowels = "aeiouy"; //гласные
var pos=0, res;
var res = str.charAt(0);
for (var i = 0; i <= str.length; i++) {
for (var j = 0; j <= vowels.length; j++) {
if (pos == i) continue;//если есть позиция букву которой мы взяли то пропускаем
if (str[i] != vowels[j]) {//если согласная то
pos = i + 2;//позиция увеличивается на два
} else {
pos = i + 3;//если гласная то на три
}
}
res += str[pos];//получаем букву
console.log(res)
}
Наличие символа в массиве гласных можно делать с помощью indexOf
, т.е. по факту вам не нужны 2 цикла с тремя счетчиками.
var str = "hieeelalaooo"; //строка
var vowels = "aeiouy"; //гласные
var pos, res = "";
var i = 0;
while (i < str.length) {
res += str[i];
if(vowels.indexOf(str[i]) > -1) {
i += 3;
} else {
i += 2;
}
}
console.log(res);
Ошибка в логике: вместо того, чтобы определить гласная буква или согласная, на каждую букву pos меняется столько раз, сколько букв в массиве vowels
Кроме этого:
проблемы со счетчиками (i <= str.length;
, j <= vowels.length;
) - в случае когда счетчик равен str.length
, str[i]
будет равен undefined
, так как индексация идет с нуля.
строка res меняется после изменения pos
, но до проверок, что pos не выходит за границы строки. Поэтому в конце результата выводится много undefined
if (pos == i) continue;
- бесполезное условие, которое всегда false
непонятно как связан счетчик i
с переменной pos
.
Если убрать недочеты, то может получиться так:
// Если встречается согласная буква, то пропускать одну позицию в строке, если встречается гласная - то две.
var str = "hieeelalaooo"; //строка
var vowels = "aeiouy"; //гласные
var res = '';
for (var pos = 0; pos < str.length;) {
res += str[pos];
var isVowels = false;
for (var j = 0; j < vowels.length; j++) { // проверяем тип буквы
if (str[pos] == vowels[j]) { // если гласная
isVowels = true; // выставляем флаг
break; // выходим
}
}
if (isVowels) {
pos += 3;
} else {
pos += 2;
}
console.log(res)
}
вместо внутреннего цикла, можно воспользоваться методом indexOf
как в ответе @br3t
либо перевести строку в объект, с ключами соответствующими гласным буквам и использовать его:
// Если встречается согласная буква, то пропускать одну позицию в строке, если встречается гласная - то две.
var str = "hieeelalaooo"; //строка
var vowels = "aeiouy".split('').reduce((acc, el) => acc[el] = true && acc, {}); //гласные
var res = '';
for (var pos = 0; pos < str.length;) {
res += str[pos];
if (vowels[str[pos]]) {
pos += 3;
} else {
pos += 2;
}
console.log(res)
}
var str = "hieeelalaooo"; //строка
var vowels = "aeiouy"; //гласные
var vowels = new Set(vowels.split(''));
var res = '';
for (var i = 0; i < str.length; i++) {
if (str[i] === ' ')
res += str[i++];
res += str[i];
i = vowels.has(str[i]) ? i + 2 : i + 1;
}
console.log(res);
var str = "hieeelalaooo";
var vowels = 'aeiouy';
var word = '';
for (var i = 0; i < str.length; i++) {
if (str[i] == ' ') {
word += ' ';
} else if(vowels.indexOf(str[i]) > -1 ) {
word += str[i];
i += 2;
} else {
word += str[i];
i++;
}
}
console.log(word);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я написал JS функцию по очищению ошибок p:календарь, если были введены неверные данные в поле календаря (вручную заполнили поле календаря)...
Используется компонент Fabrik, он создает элемент календарь для всех элементов с датой
Нужно сделать полосатую таблицуВсе было бы довольно просто, но мою таблицу генерирует js с помощтю такого метода: