Почему попадает в бесконечный цикл indexOf?
let str = 'some string';
let target = 's';
for(let pos = 0; pos !== -1; pos++) {
pos = str.indexOf(target, pos);
console.log(pos);
}
Почем данный цикл является бесконечным и выводит -1? Хотя в условии задано явно проверка на -1. И как можно исправить при минимуме изменений?
Ответы (3 шт):
Автор решения: Qwertiy
→ Ссылка
Ну отладчик же существует.
Когда indexOf вернул -1, после вывода происходит ++pos и проверка 0 !== -1.
let str = 'some string';
let target = 's';
for (let pos = 0; ; ++pos) {
if ((pos = str.indexOf(target, pos)) === -1) break;
console.log(pos);
}
Автор решения: Igor
→ Ссылка
Потому что когда pos становится равным -1, ему тут же в конце итерации добавляется 1.
let str = 'some string';
let target = 's';
let count = 0;
for(let pos = 0; pos != -1 && count < 20; pos++,count++) {
console.log(pos, str.indexOf(target, pos));
pos = str.indexOf(target, pos);
}
console.log('done');
Автор решения: Vadim
→ Ссылка
Когда твой indexOf возвращает -1 на скобочке } (в конце цикла) к -1 добавляется +1, таким образом минимальное значение 0 (цикл бесконечен)
Мне кажется, или ты хотел сделать что-то такое?
let str = 'some string';
let target = 's';
let tf = false;
for(let pos=0; pos < str.length; pos++){
tf = str.charAt(pos) === target;
if(tf)console.log(tf, pos);
}
Вот твой цикл, но рабочий
let str = 'some string';
let target = 's';
for(let pos=0; pos < str.length; pos++){
const index = str.indexOf(target, pos);
if(index !== -1){
console.log(index, pos); // pos просто для информации
pos = index;
}else break;
}