如何在javascript中从键值对象对创建变量

时间:2014-01-20 10:33:02

标签: javascript

我有一个这样的对象:

Object {geom: "-116.2, 35.6", hazard_c_5: "0.970118393901, 0.904556039223", hazard_c_6: "0.970118393901, 0.904556039223", iml: "0.005, 0.007", pga_mean: "0.987965748334, 0.958177134411"

如何为每个键创建一个变量并将其值设置为各自的键值?

我正在尝试这个:

for(i in data) {
    console.log(i, data[i]);
}

但我不清楚如何将i设置为变量并将data.[i]设置为变量值?

我在追求:

var geom = "-116.2, 35.6";
var hazard_c_5 = "0.970118393901, 0.904556039223";
...

修改

我还应该提一下,数据中键值对的数量会发生变化

6 个答案:

答案 0 :(得分:2)

with语句,它就是这样做的。

var data = {
    geom: "-116.2, 35.6",
    hazard_c_5: "0.970118393901, 0.904556039223",
    hazard_c_6: "0.970118393901, 0.904556039223",
    iml: "0.005, 0.007",
    pga_mean: "0.987965748334, 0.958177134411"
}

with(data) {
    console.log(geom, iml);
}

请注意,使用with会阻止JS引擎使用多个优化,并且通常有更好的方法。

答案 1 :(得分:1)

只要您想创建全局变量,就可以在window对象中将它们创建为属性:

for(i in data) {
  window[i] = data[i];
}

现在您可以像使用全局变量一样使用它们。窗口属性和全局变量之间唯一的实际区别是可以删除窗口属性。

答案 2 :(得分:0)

试试这个:

(function (context) {
    var data = {
        geom: "-116.2, 35.6",
        hazard_c_5: "0.970118393901, 0.904556039223",
        hazard_c_6: "0.970118393901, 0.904556039223",
        iml: "0.005, 0.007",
        pga_mean: "0.987965748334, 0.958177134411"
    };
    for(var i in data) {
         context[i] = data[i];
    };
    alert(geom);
})(this)

答案 3 :(得分:0)

以下将按照您的要求进行操作,但为什么不使用该对象本身? :/

var myObject = {
    x: 1,
    y: 2,
    z: 3
};

for( i in myObject ) {
    this[i] = myObject[i];
    console.log( this[i] );
}

答案 4 :(得分:0)

你为什么要这样做?

这是完全错误的。

当然你可以(但不应该)使用像{eval(“var geom = -116.2,35.6;”)这样的eval但请相信我,你不需要这个。

我希望您知道可以使用geom访问obj.geom值。

但你问我:为什么我不应该?

  • 效果:这会降低您的应用速度。 This将向您展示Hugo Bonacci通过简单地摆脱这些逃避而获得的改进。

  • 安全性:经验丰富的开发人员可能会将代码注入您的应用程序。这可能在几个方面有害。

  • 可读性和调试:这些变量来自哪里?为何使用字符串创建它们?这个eval函数的作用是什么?

就是这样。但你可以(不应该)使用eval。但是不要使用eval。

答案 5 :(得分:-1)

编辑:在否定投票之前,这个答案请 RTFA ,我建议使用邪恶。

你可以做邪恶 eval:

for (var i in obj) {
    eval("var " + i + " = " + obj[i] + ";");
}

但这是一个糟糕的坏习惯,所以你应该尽可能避免。而是使用对象的属性:

var geom = obj.geom;

但如果问题是您不知道对象的属性,那么您可以使用方括号访问它们:

var foo = obj["geom"];

其中“geom”是一个带有属性名称的字符串,即:

var key = "geom"
//later in the code
var foo = obj[key]