2014-02-19 3 views
0

Как читать объект из массива или что я делаю неправильно?Javascript: Потеря ссылки на объект при чтении элементов массива

Вот мой массив карта с объектом в качестве ключа:

var nj = new RegExp("nj","g"); 
var replaceMap = {nj:"ň"}; 

Но в то время как перекручивание массива я не могу получить правильную ссылку на объект.

for (var replaceValue in replaceMap) { 
    text = text.replace(replaceValue, replaceMap[replaceValue]); 
} 

При замене выполняет то он заменяет только один экземпляр поиска текста - RegExp объект модификатор глобального матча («г») игнорируется. Я полагаю, что я не получил действительную ссылку на объект в replaceValue. Когда я использовал операцию замены переменной nj, она работает нормально.

Заранее спасибо.

ответ

0

Проверьте это в вашем браузере консоли (нажмите F12 в Chrome в Firefox):

>var aa="hello"; 
undefined 
>var replaceMap={aa: "Hello2"} 
undefined 
>replaceMap 
Object {aa: "Hello2"} 

Это эквивалентный код:

var aa="hello"; 
var replaceMap={}; 
replaceMap.aa="Hello2"; 

replace.aa не имеет ничего общего с переменной aa

Но вы можете исправить это перестановкой ключи и значения в карте:

var replaceMap = {"ň": nj}; 
for (var replaceValue in replaceMap) { 
    text = text.replace(replaceMap[replaceValue], replaceValue); 
} 
+0

Тип объекта как ценность карты работает нормально, спасибо – 4ir4o

0
text = text.replace(/nj/g, 'ň'); 

Это должно выполнять ту же самую вещь

1

Причина:

Когда вы смотрите что-то вроде для (вар х в о) {...}, то х является Java-строка, а не объект.

Так что в вашем случае это «щ» и не RegExp объект Nj

, следовательно, только первый матч заменяется.

Вы можете проверить это следующим образом:

var a=new RegExp("kk","g"); 
var mymap={a:"jjj"}; 

for(var k in mymap){ 
console.log(k+" "+typeof k); 
} 

Выход консоли даст вам TYPEOF ключ

+0

да, вы правы, это «строка» – 4ir4o

+0

спасибо, это помогло, но это не решение. – 4ir4o

Смежные вопросы