Страницы

Поиск по вопросам

пятница, 5 апреля 2019 г.

JavaScript: лишняя итерация цикла do while

Этот код, взятый с javascript.ru, ищет все вхождения подстроки "иа":
var str="Ослик иа-иа посмотрел на виадук"; var poisk="иа"; var i=0; do { var x = str.indexOf(poisk,i); i=x+1; alert(x) } while (x!=-1)
Недостаток этого кода в том, что он проходит одну лишнюю итерацию, когда indexOf уже вернул -1. Я модифицировал этот код следующим образом:
var string = "JavaScript и Java - разные языки!"; var substring = "Java";
var nextDesiredSubstringPosition = 0;
while (desiredSubstringPosition!=-1){ // позиция подстроки, которую мы ищмем var desiredSubstringPosition = string.indexOf(substring, nextDesiredSubstringPosition); if (desiredSubstringPosition === -1 ){break;} nextDesiredSubstringPosition = desiredSubstringPosition + 1;// в следующей итерации начинаем отсюда }
Лишнюю итерацию я убрал, но получается что условие при while никогда не выполняется в строке с этим условием, а выход из цикла осуществляется засчет вложенного if. Программа работает, но код не логичный. Можно ли убрать эту нелогичность, не усложняя код?


Ответ

Почему бы вам не сделать так?
var str = "Ослик иа-иа посмотрел на виадук"; var poisk = "иа"; var x, i = 0; while ((x = str.indexOf(poisk,i)) != -1) { alert(x) i=x+1; }
Внутри условия цикла вычисляем x и тут же его сравниваем.

Комментариев нет:

Отправить комментарий