2014-01-20 65 views
-1

我有一個這樣的對象:如何創建鍵值對象對變量在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"; 
... 

編輯

我還要提到的是鍵值對的數據的數量將改變

+1

你想這樣做的任何理由?你不能直接訪問對象屬性嗎? – Andy

+0

嘗試使用: var Data = 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」 } 然後使用 Data.geom 獲取值 –

+1

我想使用D3.js圖表​​中的值,例如圖表圖例中將使用geom值,危險和pga值將用於x軸和iml值將用於y軸。 – Bwyss

回答

1

只要你想全局變量,你可以創建它們作爲window對象屬性:

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

現在你可以使用它們,就像你使用全局變量。窗口屬性和全局變量唯一的實際區別是窗口屬性可以被刪除。

+0

如果可能,我不希望變量爲全局變量,但它的工作原理是,謝謝 – Bwyss

+1

這被稱爲「全局對象污染」,如果您不確定對象內部屬性的名稱,您可以輕鬆搞定所有東西,因爲你也可以覆蓋Window對象的其他變量。 –

+0

@Bwyss:最好的當然是如果你可以訪問你的對象的數據來代替。如果你想創建局部變量,你需要使用'eval'函數,這是可行的,但並不總是可取的。 – Guffa

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) 
2

with sta tement,其確實如此。

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

編輯:之前負面投票這個答案請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] 
0

下面將執行您要求的操作,但爲什麼不使用該對象本身? :/

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

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

爲什麼你會這麼做?

這根本就是錯的。當然你可以(但不應該)使用eval,比如`eval(「var geom = -116.2,35.6;」),但是相信我,你不需要這個。

我希望您知道,您可以通過使用obj.geom訪問geom值。

但你問我:爲什麼我不應該?

  • 性能:這將您的應用程序變慢。 This將告訴你雨果博納奇通過簡單地擺脫這些事故得到了多少改進。

  • 安全:有經驗的開發人員可能會將代碼注入到您的應用程序中。這在幾個方面可能是有害的。

  • Readabilty和調試:這些變量來自哪裏?爲什麼用字符串創建它們?而且,這是什麼eval函數呢?

就是這樣。但是你可以(不應該)使用eval。但不要使用eval。