2012-11-05 91 views
2

我正在循環瀏覽jQuery選擇器,並嘗試將表單元素的值分配給容器變量,然後可以將其傳遞給JSON。在JavaScript中將對象鍵設置爲動態值

假設有三組複選框,每個複選框都有自己的div,名爲group1,group2和group3。

這是僞代碼,但這樣的事情:

var data = {}; 
var groups = { 
    'group1': obj with a bunch of key val pairs for checkboxes, 
    'group2': another obj, 
    'group3': and another obj 
}; // these define divs/groups of checkboxes 

// create all the checkboxes and divs from the groups object somewhere in here 

//now build a function to loop over the groups and get any checked boxes 
function getInputs(){ 
    $.each(groups, function(index, el) { 
     // this is where I am stuck 
     data.index = $('#' + index + ' input:checked'); // <-- how to do this? 
    }); 
} 

所以基本上我想要的檢查項的值添加到適當的項目在data object--如。如果我們遍歷了group1格,然後各組的複選框將被添加到​​,data.group2

我如何data.index評估爲​​?

+1

可能的重複[如何從變量創建對象屬性在JavaScript中的可變值?](http://stackoverflow.com/questions/2241875/how-to-create-object-property-from-variable-value-in-javascript)或者[如何動態設置Javascript對象值? ](http://stackoverflow.com/q/6439915/615754) – nnnnnn

回答

6

簡單:

data[index] 

.......

+0

爲什麼不'eval(「data。」+ index)'? ;) – alex

+0

@alex:它只允許真正的js ninjas ;-) – zerkms

+0

我認爲** Julio **想要的是'data [「group」+ index]'。 @Alex,eval的使用本質上是危險的,因爲它會超出你的要求。例如:'var index =「group1; alert('go **** yourself')」; eval(「data。」+ index);'(對於如此直言不諱:))現在你可以繼續使用它,如果你能確保輸入不會有有害的代碼,但爲什麼讓自己面臨這樣的風險是一個更安全的選擇? – cbayram

0

如果你能夠使用ES6的JavaScript功能,您可以使用Computed Property Names非常容易地處理這個問題:

var request = {id : 1236}; 
var responseMessage = 'The response message'; 

var resp = {responses: {[request.id]: responseMessage}}; 

[request.id]對象鍵具有動態值