2015-08-13 2 views
0

я код функции, как быть низким:Заменить строку "a < ? AND b >?" массивом [1, 2], чтобы быть "> 1 и Ь <2"

str = "a < ? AND b > ?" 
replace = [1, 2] 
for(i = 0; i < replace.length; i++) 
{ 
    str = str.replace("?", replace[i]); 
} 

Это правильно, как и ожидалось: "a > 1 AND b < 2"

Но когда я пытаюсь другим заявлением: replace = ["?", 2].

Результат будет: "a < 2 AND b > ?"

Как я могу заменить строку в этом случае.

+0

@nhahtdh: Я пытаюсь сделать простой пример. Но вы можете изобразить, если один элемент замены существует в других. Извините за мой английский. – vietean

+0

Исходная строка '' a < ? AND b >? "', Но тогда вы говорите: «Это правильно, как ожидалось:« a> 1 AND b <2 »'. Почему оператор сравнения меняет направление? – nhahtdh

ответ

0

Вы должны начать поиск после индекса предыдущего поиска на каждой итерации.
JavaScript имеет не replace метод, который принимает параметр start, так что я сделал это, найдя индекс "?" и сделать замену, используя метод substring:

var str = "a < ? AND b > ?"; 
 
var replace = ["?", 2]; 
 
var index = 0; 
 
for(i = 0; i < replace.length; i++) 
 
{ 
 
    index = str.indexOf("?",index); 
 
    str = str.substring(0,index) + replace[i] + str.substring(index+1); 
 
    index++; 
 
} 
 
alert(str);

0

У вас есть два элемента в массиве. Поэтому вы дважды вызовете метод replace (один раз на каждом проходе цикла).

В первом примере это то, что происходит:

"a < ? AND b > ?" to 
"a < 1 AND b > ?" to 
"a < 1 AND b > 2" 

В примере вы думаете, у вас есть проблемы, это работает так:

"a < ? AND b > ?" to 
"a < ? AND b > ?" to HERE you are replacing a question mark with a question mark. 
"a < 2 AND b > ?" 
0

Я думаю, что вы должны разделить ул к _array (_array of words), а затем заменить это _array от _replace (лет ur array).

Пример:

str  = "a < ? AND b > ?" 
_replace = [1, 2] 
_array = str.plit(" ") //["a","<","?","AND","b",">","?"]; 
index  = 0 
for(i = 0; i < _array.length; i++) 
{ 
    if(replace[i] === "?") 
    { 
     _array[i] = _replace[index] 
     index++ 
    } 
} 
str = _array.join(" ") 
Смежные вопросы