2011-08-31 88 views
54

我正在通過「複選框」類型的幾個輸入元素進行循環。之後,我將值和檢查屬性添加到數組中。這是我的代碼:通過.push()方法將項添加到對象

var stuff = {}; 
$('form input[type=checkbox]').each(function() { 
    stuff[$(this).attr('value')] = $(this).attr('checked'); 
}); 

這工作得很好,但我只是想知道如果我能做到與jQuery的.push()方法完全一樣的東西?

我已經試過這樣的事情,但它不工作:

stuff.push({$(this).attr('value'):$(this).attr('checked')}); 

編輯:

我試圖用.push()上對象的方法,但.push( )實際上只是Array對象的一種方法。

+0

如果你真的按照你描述的初始化「東西」,你的第二個例子不可能工作。 – Pointy

+0

也許我已經試過這個例子,當東西被初始化爲「var stuff = [];」。我認爲你是對的,是的... – dperitch

回答

117

.push()是的Built-in Array Object

的方法它是無關的jQuery以任何方式。

要定義文字對象

// Object 
var stuff = {}; 

可以定義文字陣列這樣

// Array 
var stuff = []; 

然後

stuff.push(element); 

數組實際上獲得了從它們的父對象繼承的括號語法stuff[index]。這就是爲什麼你可以像你第一個例子那樣使用它。

這通常被用來毫不費力地反射動態地訪問屬性

stuff = {}; // Object 

stuff['prop'] = 'value'; // assign property of an 
         // Object via bracket syntax 

stuff.prop === stuff['prop']; // true 
12

stuff是一個對象,push是一個數組的方法。 所以你不能使用stuff.push(..)

比方說,你定義stuff爲數組​​那麼你可以調用它的push方法。

這是可行的,因爲對象[鍵/值]格式良好。

stuff.push({'name':$(this).attr('checked')});

雖然這不會工作,因爲對象沒有很好地形成。

此操作,因爲我們正在處理stuff作爲關聯數組和附加價值它

stuff[$(this).attr('value')] = $(this).attr('checked');

+2

這並不能解釋爲什麼'stuff.push({'name':$(this).attr('checked')});'工作。老實說,它不應該。 –

11

所以很容易)))

關注此...

var stuff = {}; 
    $('input[type=checkbox]').each(function(i, e) { 
     stuff[i] = e.checked; 
    }); 

,你將有:

Object {0: true, 1: false, 2: false, 3: false} 

或:

$('input[type=checkbox]').each(function(i, e) { 
    stuff['row'+i] = e.checked; 
}); 

您將有:

Object {row0: true, row1: false, row2: false, row3: false} 

或者:

$('input[type=checkbox]').each(function(i, e) { 
    stuff[e.className+i] = e.checked; 
}); 

您將有:

Object {checkbox0: true, checkbox1: false, checkbox2: false, checkbox3: false} 
2

這是很容易的: 例

//my object 
var sendData = {field1:value1, field2:value2}; 

//add element 
sendData['field3'] = value3;