如何使用数组键(文本值)以相同的名称引用变量?
var cr,au,gen,bn,fmt,str;
var sbASCtrls = {"cr":"ContentRating","au":"Gold","gen":"Gender","bn":"Big Number","fmt":"Format","str":"Starting String"};
for (var key in sbASCtrls){
//This does not work ... breaks script
"'"+key+"'" = sbASCtrls[key];
alert('var CR: ' + cr);
return false;
}
在另一种语言中,我只是用百分号包围var名称,因此:
var %key% = "bob";
会:
var cr = bob;
如何在javascript中完成?
为什么我需要这个不寻常的解决方案:
正在对预先存在的PHP处理器文件进行一系列AJAX调用,该文件需要HTML中的所有数据。在这种情况下,我已经有了JSON / jsObj格式的数据,并希望快速将其分解为单独的变量。使用eval()
实现了最有效/可读(相信与否!)的代码。在阅读了Jonathan和Niet的帖子/评论后,我一直在努力解决如何将数据保存为JSON格式并使用它,但AJAX处理器总是需要HTML格式的一段数据。令我失望的是,我无法找到混合两种数据类型的方法。面对重新编码整个应用程序以仅使用JSON或继续使用HTML的选择,SDLC为我做出了决定。
感谢Niet,Jonathan,Cristy,Stephen Thomas和Fallenreaper提供了良好的建议和好主意。我将确定您已制作的其他帖子。
答案 0 :(得分:4)
虽然可以使用eval
,但是这样:
// DO NOT DO THIS
eval(key+" = svASCtrls[key];");
你应该停下来问问自己为什么要这样做。你已经拥有一个非常整洁的物体,所以只需使用它......
答案 1 :(得分:1)
您可以将变量定义为对象的属性
var obj = { cr: null, au: null, gen: null, bn: null, fmt: null, str: null };
var sbASCtrls = {"cr":"ContentRating","au":"Gold","gen":"Gender","bn":"Big Number","fmt":"Format","str":"Starting String"};
for (var key in sbASCtrls){
//This does not work ... breaks script
obj[key] = sbASCtrls[key];
alert('var CR: ' + obj.cr);
return false;
}
答案 2 :(得分:1)
由于任何全局变量都是window
对象的子项,因此您可以在window[key]
for (var key in sbASCtrls){
alert("key: " + key);
alert("val: " + sbASCtrls[key] );
//This should work, but jsfiddle messes with the window object
window[key] = sbASCtrls[key];
alert('var CR: ' + cr);
return false;
}
请注意,这不适用于jsfiddle,但应该适用于您的网站。