2012-03-09 41 views
3

我發現自己需要爲每個動態鍵一次指定一行,從而爲自己製作(可能)更多的工作。將多個動態鍵名添加到javascript對象的速記方式

我現在正在做的附加鍵添加到現有對象:有

jQuery.extend({('title_' + id) : field_data[0], ('field_' + id) : field_data[1]}); 

是一種更簡單的方法:

create_request[('title_' + id)] = field_data[0]; 
create_request[('field_' + id)] = field_data[1]; 

什麼,我希望能夠做的就是像比我現在正在做的(因爲我希望工作不會)?或者這只是語言的限制?

編輯爲清楚:

好了,你可以在JavaScript中創建一個對象是這樣的:

{ 
a : 1 
} 

但是,假設一個是關鍵的字符串值。如果我想讓鑰匙成爲變量的價值會怎樣?

我可以這樣做:

the_object[variable] = 1 

但是如果我想要做的這些動態插入到對象中的一個以上的?有沒有一種方便的方法來做到這一點?

+0

http://stackoverflow.com/questions/ 171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically不是重複的,而是沿着你想要的路線。你可以使用你的'create_request'對象和一個包含你所有字段的新對象,並將它們合併在一起。 – Brad 2012-03-09 04:42:46

+0

@布拉德,也許我不清楚,但這個問題根本不相似。我知道你可以將兩個對象合併在一起(我甚至在示例中使用了jquery的擴展)。 – GoldenNewby 2012-03-09 04:43:49

+0

@Brad,作爲對您編輯的迴應:我不明白這將如何成爲速記解決方案。 – GoldenNewby 2012-03-09 04:44:21

回答

3

如果我只能改變一件關於JavaScript的東西,它將是對象字面語法。我認爲屬性名稱應該被評估爲與屬性值相同的表達式;我認爲,使用靜態名稱時,這樣做的好處會超過被迫引用引用屬性名稱的麻煩。但是,如果願望是魚...

使用方括號表示法是使用動態名稱設置屬性的唯一內置方法,但創建自己的函數時需要輸入非常類似於語法,希望利用:

extendObject(obj, props) { 
    for (var i = 0; i < props.length; i+=2) 
     obj[props[i]] = props[i+1]; 
} 

extendObject(create_request, ['title_' + id, field_data[0], 'field_' + id, field_data[1]]); 

通過使用陣列而不是一個普通的對象來保存新的屬性名稱和值,你可以使用動態名字。

(另請注意,即使你的問題的方括號語法,你做了稍微複雜得多,它需要通過包括冗餘的括號內。)

+1

你今晚有兩個人和我在一起。我想你可能是唯一明白我所說的話的人:P – GoldenNewby 2012-03-09 05:06:51