如何从数组中读取对象,或者我做错了什么?
这是我的数组映射,其中对象为键:
var nj = new RegExp("nj","g");
var replaceMap = {nj:"ň"};
但是在循环数组时,我无法获得有效的对象引用。
for (var replaceValue in replaceMap) {
text = text.replace(replaceValue, replaceMap[replaceValue]);
}
当执行替换时,它只替换搜索文本的一个实例 - 忽略全局匹配(“g”)的RegExp对象修饰符。我想,我没有在replaceValue中获得有效的对象引用。当我使用nj变量替换操作时,它工作正常。
提前致谢。
答案 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);
}