2017-02-16 73 views
1

我在JavaScript的新的,這裏是一個新手的問​​題:提取JSON轉換爲JavaScript變量

在PHP中,有一個extract()方法,可以從一個關聯數組變量導入。例如:

$var_array = array("color" => "blue", 
        "size" => "medium", 
        "shape" => "sphere"); 
extract($var_array); 
// $color is a defined varible here with the value of "blue" 

我不知道是否有標準JavaScript的方法,或在流行的庫如jQuery或下劃線,做同樣的JavaScript對象。我的意思是這樣的:

jsObject = {"color" : "blue", 
      "size" : "medium", 
      "shape" : "sphere"}; 

extract(jsObject); // Is there such a thing? 

// Here, color is a defined variable 
+0

沒有沒有這樣的功能,但你爲什麼需要這個? –

+0

你爲什麼需要它?您可以僅使用JSON並使用JSON.parse()將其作爲對象進行轉換。您可以使用myObject.color – rakwaht

+1

輕鬆訪問顏色值,您可以聲明爲'window'對象(全局作用域):'jsObject.forEach(function(value,key){window [key] = value;});' – ramabarca

回答

3

你可以做這樣的事情:

Object.getOwnPropertyNames(obj).forEach(k => window[k] = obj[k]); 

或限制新變量的作用域:

Object.getOwnPropertyNames(obj).forEach(k => this[k] = obj[k]); 
2

您可以使用

function extract(jsObject){ 
    for (var key in jsObject) { 
     window[key] = jsObject[key]; 
    } 
} 




console.log(size) //medium 
2

標準的Javascript中沒有任何東西帽子的工作完全是這樣,但如果你使用ES6可以解構這樣

const obj = { 
    color: 'blue', 
    size: 'medium', 
    shape: 'sphere', 
} 

const { color, size, shape } = obj; 

console.log(color, size, shape) // blue medium sphere 

你的對象可以使用Babel到transpile你的代碼ES6。現在如果你剛剛開始,它可能會稍微先進一點,所以我建議你堅持直觀的方法,但幾個星期後肯定會看到巴別爾。它給你一些非常酷的東西。

0

有2個問題,使用窗口對象:

  1. 它,和它的所有屬性都是默認的全局變量。這可能沒有興趣。

  2. 必須有一個假設,它存在於所有瀏覽器(它現在)。想想的NodeJS

你可以這樣做:

for (var key in jsObject) { 
    eval('var ' + key + ' = ' + jsObject[key]); 
} 

試試這個,可能會有幫助:

(function() { 
    var jsObject = {color: 'blue'}; 

    // Dynamically assign to local variables 
    for (var key in jsObject) { 
     eval('var ' + key + ' = ' + jsObject[key]); 
    } 

    // Test locally 
    console.log(color); 
})(); 

// Test globally 
console.log(color); 

結果:

'blue' 
[error] color is not defined