[英]how to create variables from key value object pair in 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";
...
編輯
我還要指出的是,數據中鍵值對的數量將會改變
有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 Engine進行多種優化,並且通常有比這更好的方法。
只要要創建全局變量,就可以在window
對象中將它們創建為屬性:
for(i in data) {
window[i] = data[i];
}
現在,您可以像使用全局變量一樣使用它們。 窗口屬性和全局變量之間的唯一實際區別是,可以刪除窗口屬性。
嘗試這個:
(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)
以下內容將滿足您的要求,但是為什么不使用對象本身呢? :/
var myObject = {
x: 1,
y: 2,
z: 3
};
for( i in myObject ) {
this[i] = myObject[i];
console.log( this[i] );
}
您為什么會這樣做?
這是完全錯誤的。
當然你也可以(但不應)使用eval
像`的eval(“VAR GEOM = -116.2,35.6;”),但相信我,你不需要這個。
希望您知道可以使用obj.geom
訪問geom
值。
但是你問我:為什么我不應該呢?
性能 :這會減慢您的應用程序的速度。 這將向您顯示Hugo Bonacci通過簡單地擺脫這些評估而獲得了多少改進。
安全性 :經驗豐富的開發人員可能會將代碼注入您的應用程序。 這可能以多種方式有害。
可讀性和調試 :這些變量從何而來? 為什么要使用字符串創建它們? 而且,此eval
函數的作用是什么?
而已。 但是您可以(不應)使用eval。 但是不要使用eval。
編輯:在否決此答案之前,請RTFA ,我建議不要使用邪惡。
您可以進行邪惡評估:
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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.