2015-03-25 67 views
0

我在一個函數中創建一個對象 - 我通過3個變量,1是名稱,2是名稱,3是一個數組。Javascript,創建對象的最佳方法與變數

所以現在我創建這個對象,像這樣

createObj(var, var2, var3){ 
    var temp1 = {}; 
    var temp2 = {}; 

    temp2[var2] = var3; 
    temp1[var] = temp2; 
    } 

創建並反對像

{var1 : {var2 : var3 }}; 

所以這個工作得很好(我想尋找這樣的對象),但我m想知道是否有辦法做到這一點,而不使用這麼多的變量來做到這一點?如果這使得它更容易,我正在使用下劃線。如果有一個更加優雅(並希望)簡單的方法來實現這一點,這將是很酷的。我的意思是,這種方法對我來說很好,但是我試圖提高我的JavaScript技能,並儘可能少使用代碼:)。謝謝!

+2

這完全沒錯。只有使用ES6才能使用'{[var1]:{[var2]:var3}}'的文字。當然,如果你看到自己一遍又一遍地做這件事,你可以寫一個輔助函數 - 你實際上只是在做。 – Bergi 2015-03-25 00:57:09

+0

@Bergi必須有一個更優雅的方式來做到這一點?沒有? – ajmajmajma 2015-03-25 00:57:44

+0

@ajmajmajma直到ES6,因爲你的密鑰是動態的。 – GregL 2015-03-25 00:58:07

回答

1

這完全沒問題。只有使用ES6才能使用{[var1]: {[var2]: var3}}。當然,如果你看到自己一遍又一遍地做這件事,你可以寫一個輔助函數 - 你實際上只是在做。

一點更優雅的方式來寫這個功能可能是

function createObj(key, val) { 
    if (arguments.length > 2) 
     val = createObj.apply(null, Array.prototype.slice.call(arguments, 1)); 
    var temp = {}; 
    temp[key] = val; 
    return temp; 
} 

,使之與無限多arguments工作。但你也可以只是做

function createObj(key, val) { 
    var temp = {}; 
    temp[key] = val; 
    return temp; 
} 

並稱之爲createObj(var1, createObj(var2, var3))它更好地傳達你的意圖。而只有兩個調用你不需要循環/遞歸。

+0

我希望能有一些棘手的方法來做到這一點或某事,哈哈。感謝您的建議!我會將其標記爲正確的。 – ajmajmajma 2015-03-25 01:07:58