Javascript:读取数组项时丢失对象引用

时间:2014-02-19 10:45:15

标签: javascript arrays object

如何从数组中读取对象,或者我做错了什么?

这是我的数组映射,其中对象为键:

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

但是在循环数组时,我无法获得有效的对象引用。

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

当执行替换时,它只替换搜索文本的一个实例 - 忽略全局匹配(“g”)的RegExp对象修饰符。我想,我没有在replaceValue中获得有效的对象引用。当我使用nj变量替换操作时,它工作正常。

提前致谢。

3 个答案:

答案 0 :(得分:1)

原因:

当您引用类似for(var x in o){...}的内容时,x是一个javascript字符串,而不是一个对象。

所以在你的情况下它是" nj"而不是RegExp对象nj

因此只有第一场比赛被替换。

你可以这样测试:

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

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

控制台输出将为您提供键的类型

答案 1 :(得分:0)

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

这应该执行相同的事情

答案 2 :(得分:0)

在浏览器控制台中查看此内容(在Firefox的Chrome中按F12):

>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);
}