Этот код, взятый с 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 и тут же его сравниваем.
Комментариев нет:
Отправить комментарий