在javascript中为对象设置变量变量

时间:2011-05-27 11:38:55

标签: 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)。任何人都可以想到一种自动设置这些变量的好方法吗?

感谢, 马特

2 个答案:

答案 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"

但当然这完全取决于你想做什么。