簡體   English   中英

如何在javascript中從鍵值對象對創建變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM