2011-11-10 71 views
5

這裏是我如何創建動態命名的JavaScript對象屬性?

<form> 
    <input type="text" name="item1" class="grab" value="userInput" /> 
    <input type="text" name="somethingelse1" class="grab" value="differentUserInput" /> 
    ... (any number of inputs) 
</form> 

使用jQuery/JavaScript的我想建立與名稱值對對象的數組,看起來像這樣:

output = [ {item1: userInput}, {somethingelse1: differentUserInput} ... etc.]; 

我都沒有成功嘗試這樣做:

var output = new Array(); 
$('.grab').each(function(index) { 
    output.push({$(this).attr('name'): $(this).val()}); 
}); 

我嘗試了幾個變化,包括試驗eval(),但無濟於事。如果我刪除$(this).attr('name'),並給它一個靜態名稱,它會起作用......那麼我如何創建動態命名的對象?

回答

16

文字對象語法不能用於非文字鍵。 要在對象上使用非文字鍵,需要使用object[keyExpression]表示法,如下所示。 (這相當於object.keykeyExpression = "key",但請注意前者的情況下接受一個表達作爲密鑰和後者的標識符。)

var output = [] 
$('.grab').each(function(index) { 
    var obj = {} 
    obj[$(this).attr('name')] = $(this).val() 
    output.push(obj) 
}) 

編碼愉快。


而且,考慮使用.map()

var output = $('.grab').map(function() { 
    var obj = {} 
    obj[$(this).attr('name')] = $(this).val() 
    return obj 
}) 
+0

謝謝你,工作。感謝您的快速回復和良好的信息。 – user988300

+0

@pst - 非常整齊,謝謝!學到了新的東西... – xgencoder

+0

感謝偉大的實用工具:) – ProllyGeek

0

我只用了表單的id作爲該函數的參數:

function form2JSON(form){ 
    var info_ser = $('#'+form).serialize(); 
    var data = info_ser.split('&'); 
    var output = {}; 
    $.each(data, function(i, l){ 
     var data_input = l.split('='); 
     output[data_input[0]] = data_input[1]; 
    }); 
    return output; 
} 

結果對象是這樣的Object { fieldname="value", fieldname1="value1", fieldname2="value3", ...}