Я пытаюсь перебрать строковую переменную и сохранить каждый символ внутри другой переменной. Мой код выглядит так:

    var str = "hello world";
    var res = "";

    for (var i = str.indexOf("hello"); i <= str.lastIndexOf("hello"); i++) {
        res = res.concat(str.charAt(i));    
    }

    console.log("The result is: " + res);

Это выглядит действительно логичным для меня, но печатает только 1-ю букву. Я ожидал, чтобы сказать привет. В чем проблема? Не может быть сделано без регулярного выражения?

2
Manos Z 29 Авг 2017 в 23:24

3 ответа

Лучший ответ

Вам нужна длина и начальная позиция для проверки индекса.

var str = "bla bla hello world",
    res = "",
    i,
    l = "hello".length,
    p = str.indexOf("hello");

for (i = p; i < p + l; i++) {
    res += str[i];
}

console.log("The result is: " + res);
1
Nina Scholz 29 Авг 2017 в 20:33

Замените str.lastIndexOf("hello") на pattern.length:

var str = "hello world";
var pattern = "hello";

var res = "";

var index = str.indexOf(pattern);

for (var i = index; i <= index + pattern.length; i++) {
  res = res.concat(str.charAt(i));
}

console.log("The result is: " + res);

Из документации:

Метод lastIndexOf () возвращает индекс в вызывающем объекте String последнего вхождения указанного значения, выполняя обратный поиск из fromIndex. Возвращает -1, если значение не найдено.

Это не индекс последнего символа.

1
Danil Speransky 29 Авг 2017 в 20:30

Цикл For внутри строки для объединения символов в переменной (без RegEx)

var theString = "This is my string";
var theArray = [];
var theResultString = "";

doIt(theString);
doitagain(theString)
function doIt(incomingString)
{
  //concatenate into an array object
  for(var i = 0; i < incomingString.length; i++)
    {
      theArray.push(incomingString.substring(i, i+1))
    }
  console.log(theArray);
}

function doitagain(incomingString)
{
  //concatenating into a string object
  for(var i = 0; i < incomingString.length; i++)
  {
    theResultString += incomingString.substring(i, i+1);
  }
  console.log(theResultString);
}
0
blaze_125 29 Авг 2017 в 20:36