如何解决在javascript中的对象上设置变量变量
| 做一些与Omniture分析有关的工作,并希望能够通过JSON设置一些属性。 Omniture调用如下所示:s.linkTrackVars = \'eVar37\';
s.eVar37=\'foo\';
s.tl(true,\'o\');
我想编写一个通用函数来接收JSON对象并将其转换为那些变量。 AFAIK Omniture不允许您简单地将其传递JSON,因此这是我能想到的唯一方法。
这是我要使用的JSON结构的示例:
var omniture = {
\"evars\":
[
{
\"key\": \"37\",\"value\": \"foo\"
},{
\"key\": \"32\",\"value\": \"bar\"
}
]
}
我使用此JSON的函数如下所示:
for (i in omniture.evars) {
var evar = omniture.evars[i];
window[s.eVar + evar.key] = evar.value;
}
alert(s.eVar37); // alerts \"undefined\"
如果我这样做,它将起作用:
for (i in omniture.evars) {
var evar = omniture.evars[i];
window[\'eVar\' + evar.key] = evar.value;
}
alert(eVar37); // alerts \"foo\"
看来我无法将变量变量设置为对象的属性(例如,s.eVar37
而不是evar37
)。有人能想到一种自动设置这些变量的好方法吗?
谢谢,
马特
解决方法
你当然可以。只需将其直接放在
s
上即可:
s[\'eVar\' + evar.key] = evar.value;
, 我要IIUCs[\'eVar\' + evar.key] = evar.value;
。
编辑:替代
虽然拥有它会更简单
var omniture =
{
evars:
{
\"37\": \"foo\",\"32\": \"bar\"
}
}
copyFromInto(omniture.evars,\'eVar\',s);
function copyFromInto(o1,prefix,o2)
{
for (var i in o1)
{
o2[prefix + i] = o1[i];
}
}
alert(s.eVar37); // alerts \"foo\"
但是,当然,这完全取决于您要做什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。