我有一个这样的对象:
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";
...
修改
我还应该提一下,数据中键值对的数量会发生变化
答案 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]