2014-02-24 24 views
1

在JavaScript中創建具有鍵的對象,是否有更短的方式從下面然後可變創建對象。的JavaScript從可變

var d = 'something'; 
function map(d){ 
    var obj = {}; 
    obj[d] = d; 
    return obj; 
} 

好,在最短的樣子,但它是錯誤的,因爲關鍵是文字d低於其價值。

function wrong(d){ 
    return {d:d} 
} 

我不介意第一個版本,但想知道任何簡潔的方法。

謝謝。

+0

是的,使用第一種方法。第二種方法,關鍵是* d *,而不是'd'的值。 –

+0

出於好奇,如果鍵的名稱是始終的價值爲什麼你需要把它保存爲兩者兼而有之? –

+0

如何使用obj.d = d; ? – Triode

回答

3

我建議實例化一個匿名函數。

function map(d) { 
    return new function() { 
     this[d] = d; 
    }; 
} 

使用匿名功能將讓你保持你所有的財產申報在同一個地方要更有條理。如果您需要其他默認鍵來設置,你可以輕鬆地添加他們:

new function() { 
    this[d] = d; 
    this.foo = 'bar'; 
}; 

,而使用對象文本你必須聲明在兩個地方:

obj = { 
    foo: 'bar' 
}; 
obj[d] = d; 

這一切都表示,原來的代碼是罰款原樣。它簡潔,易讀,可維護。

function map(d) { 
    var obj = {}; 
    obj[d] = d; 
    return obj; 
} 
+5

爲什麼這比OP已經有的更好? – jfriend00

+0

@ jfriend00,我不記得曾經說這是好,但我推薦它,因爲你可以把所有的初始化在同一個地方,而不是做'O = {FOO:巴}; o [fizz] =嗡嗡聲;'。我覺得它保持代碼更整潔。 – zzzzBov

+0

@ jfriend00,而且,原始代碼**實際上比最初列出的代碼短,但是這並沒有縮小,所以它並沒有真正地產生很大的區別 – zzzzBov