2011-08-31 12 views
54

Wykonuję pętlę za pomocą kilku elementów wejściowych typu "checkbox". Następnie dodaję wartości i sprawdzone atrybuty do tablicy. To jest mój kod:Dodawanie elementów do obiektu za pomocą metody .push()

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

Działa to dobrze, ale ja po prostu zastanawiam się, czy mogę zrobić dokładnie to samo z (metoda w jQuery .Push)?

Próbowałem coś takiego, ale to nie działa:

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

Edit:

starałem się używać .Push() metodę na obiekt, ale .Push () jest tak naprawdę tylko metodą obiektu Array.

+0

Nie jest możliwe, że twój drugi przykład działa, jeśli naprawdę inicjujesz "rzeczy", jak opisujesz. – Pointy

+0

Być może próbowałem tego przykładu, gdy rzeczy zostały zainicjowane jako "var stuff = [];". Myślę, że masz rację, tak ... – dperitch

Odpowiedz

117

.push() to Sposób Built-in Array Object

on nie jest powiązany z jQuery w jakikolwiek sposób.

definiowania dosłownego Object z

// Object 
var stuff = {}; 

Można zdefiniować dosłownego Array jak ten

// Array 
var stuff = []; 

następnie

stuff.push(element); 

Tablice faktycznie otrzymują składnię nawiasów stuff[index] odziedziczoną po rodzicu, Obiekcie. Właśnie dlatego jesteś w stanie używać go tak, jak w swoim pierwszym przykładzie.

ten jest często używany do wysiłku refleksji na właściwości dynamiczne dostępu

stuff = {}; // Object 

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

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

stuff to obiekt, a push to metoda tablicy. Więc nie możesz użyć stuff.push(..).

Powiedzmy zdefiniować stuff jako tablica stuff = [];następnie możesz zadzwonić push metodę na nim.

Działa to, ponieważ obiekt [klucz/wartość] jest dobrze uformowany.

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

niniejsza nie będzie działać, ponieważ obiekt nie jest dobrze uformowane.

ten działa, ponieważ są leczenia stuff jako asocjacyjnej i wartości dodane do niego

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

+2

To nie wyjaśnia, dlaczego 'stuff.push ({'name': $ (this) .attr (" checked ")});' działa. Szczerze mówiąc, nie powinno. –

11

więc jest to łatwe)))

obejrzeć ten ...

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

i trzeba będzie:

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

Lub:

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

Trzeba będzie:

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

czyli

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

Trzeba będzie:

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

To jest naprawdę proste: Przykład

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

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