Помощь По Javascript

Тема в разделе "HTML, CSS, XML, JavaScript", создана пользователем Valimor, 7 май 2012.

  1. Valimor

    Valimor Well-Known Member

    Регистрация:
    10 апр 2010
    Сообщения:
    45
    Симпатии:
    0
    Изучаю язык поэтому составляю всякие простенькие программки, вот с одной из них и проблема
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Текст программы1</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='Javascript'>function one(s1,s2,simvolstr)
    {//начало функции
    var poisk=0 //до оператора цикла
    while(true) //цикл
    {
    k=s1.indexOf(s2,poisk)
    if(k>=0)
    {
    s1=s1.slice(poisk,k)+simvolstr+s1.slice(k+1)
    poisk=k+1
    }
    else break
    }
    return s1
    }//конец функции, дальше вызов функции во внешней проге
    alert(one("Хай таварищи маи","а","о"))[/CODE]
    Функция должна получить строковые данные, далее обработать их заменив все символы "а" на "о", ну и выдать результат.
    //Переменная poisk объявлена до оператора цикла.
    Но в результате вместо "Хой товорищи мои" получается: ->->
    Окно_вывода.jpg
    .


    Но если переменную poisk объявить в методе indexOf в самом цикле вот так:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Текст программы2</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='Javascript'>function one(s1,s2,simvolstr)
    {//начало функции
    while(true)
    {
    k=s1.indexOf(s2,poisk=0)// poisk непосредственно в методе
    if(k>=0){
    s1=s1.slice(poisk,k)+simvolstr+s1.slice(k+1)
    poisk=k+1
    }
    else break
    }
    return s1
    }//конец функции, дальше вызов функции во внешней проге
    alert(one("Хай таварищи маи","а","о"))[/CODE]
    То функция работает и выводит корректный результат("Хой товорищи мои"). Вот не могу понять почему так... вроде в первом листинге переменную объявил нормально.
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    в 1м варианте замени s1=s1.slice(poisk,k) замени на s1=s1.slice(0,k), так как если более одного вхождения, ты обрезаешь строку с найденной позиции и ищешь потом не с той позиции в обрезанной строке.
    во втором случае работает, так как ты на каждой итерации делаешь присваивание poisk=0, а так как предыдущее вхождение ты уже заменил на другой символ, то программа не зацикливается (попробуй заменить символ на сам себя, например)
     
  3. Valimor

    Valimor Well-Known Member

    Регистрация:
    10 апр 2010
    Сообщения:
    45
    Симпатии:
    0
    +
    а ведь и точно на последующих заходах начало обрезается,не подумал. спасиб
     
Загрузка...

Поделиться этой страницей