使用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
)。任何人都可以想到一种自动设置这些变量的好方法吗?
感谢, 马特
答案 0 :(得分:3)
当然可以。只需直接在s
上设置:
s['eVar' + evar.key] = evar.value;
答案 1 :(得分:1)
你想要的{II} s['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"
但当然这完全取决于你想做什么。