Попытка создать механизм, который находит слово в абзаце и заменяет его другим словом в javascript

Я все еще изучаю javascript, поэтому извиняюсь, если это простой вопрос.

я пытаюсь заменить все вхождения слова в строке другим словом, например, если я хочу изменить все вхождения слова «коричневый» на «красный» в следующей строке.

Я думаю, что мой окончательный вывод переменного абзаца при входе в консоль должен быть «быстрый рыжий лис прыгает через ленивую собаку»; однако я продолжаю получать»быстрый коричневый лис прыгает через ленивую собаку»;.

Я попытался использовать метод splice () вместо переназначения tempArray в «newWord» в моем цикле for, но он все еще не работал. Я тестирую с помощью инструментов разработчика chrome.

Вот мой код:

/* Creates mechanism that finds a word in a paragraph and replaces it
   with another word */

//Declare the original string
var paragraph = "The quick brown fox jumps over the lazy dog";

//Convert paragraph in individual words
var tempArray = paragraph.split(" "); 

// Introduce the word to be found; to be replaced
var oldWord = "brown";

// Introduces new word to replace old
var newWord = "red";

//Iterate over the array to find and replace the word
for (var i = 0; i <= tempArray.length; i++) {
    if (tempArray[i] === "oldWord") {
        tempArray[i] = "newWord";
    }
}

/* Reconvert the modified array to string by assigning it to the
   original variable */

paragraph = tempArray.join(" ");

// Display your results, it's not an array anymore
console.log(paragraph);

2 ответа

  1. вы можете использовать функцию replace() попробуйте что-то вроде:

    var result="";
    var para="hello hello test word ";
    result=para.replace("hello","replaced");
    console.log(para);//original values
    console.log(result);//modified one
    
  2. Как указано в комментариях , лучшим решением этой проблемы может быть использование replace.

    Тем не менее (и для целей обучения), ваш код прекрасно работает, если вы сделаете несколько изменений в forинструкции и теле цикла:

    for (var i = 0; i < tempArray.length; i++) {// You have to iterate until tempArray.length - 1
        if (tempArray[i] === oldWord) {// Don't wrap it in ""
            tempArray[i] = newWord;// Don't wrap it in ""
        }
    }
    

    Я подробнее остановлюсь на комментариях, которые я ввел в код:

    1. В js строки завернуты в двойные кавычки или простые кавычки. Если вы обернете имя переменной в кавычки, JS будет рассматривать его как строку, а не как переменную. Таким образом, сравнение не будет правильным.
    2. В массиве допустимыми индексами являются значения от 0 до array.длина-1. Доступ к массиву в массиве положения.length не выдаст ошибку (как в других языках, таких как Java), но она вернется undefined(что обычно не является ожидаемым поведением).

    Вы можете проверить результат вашего кода в этой скрипке (открытие консоли). Надеюсь, это поможет.