2011-08-31 41 views
54

Estoy haciendo un ciclo a través de algunos elementos de entrada de tipo 'casilla de verificación'. Después de eso, agrego valores y verifico los atributos a una matriz. Este es mi código:Agregar elementos a un objeto a través del método .push()

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

Esto funciona bien, pero me pregunto si puedo hacer exactamente lo mismo método .push() en jQuery con?

He intentado algo como esto, pero no funciona:

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

Editar:

yo estaba tratando de utilizar .push() en el objeto, pero .push () es en realidad solo un método de Array Object.

+0

No es posible que su segundo ejemplo funcione si realmente está inicializando "cosas" como usted describe. – Pointy

+0

tal vez probé ese ejemplo cuando las cosas se inicializaron como "var stuff = [];". Creo que tienes razón, sí ... – dperitch

Respuesta

117

.push() es un método de la Built-in Array Object

Se no está relacionado con jQuery de cualquier manera.

está definiendo un literal objeto con

// Object 
var stuff = {}; 

Se puede definir un literal de matriz como esto

// Array 
var stuff = []; 

continuación

stuff.push(element); 

Las matrices en realidad obtienen la sintaxis del soporte stuff[index] heredada de su elemento primario, el objeto. Es por eso que puede usarlo de la manera que lo hace en su primer ejemplo.

Esto es a menudo utilizado para la reflexión sin esfuerzo para el acceso dinámicamente propiedades

stuff = {}; // Object 

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

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

stuff es un objeto y push es un método de una matriz. Entonces no puede usar stuff.push(..).

digamos que se define como una matriz stuffstuff = [];entonces se puede llamar push método en él.

Esto funciona porque el objeto [clave/valor] está bien formado.

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

Mientras que esto no funcionará porque el objeto no está bien formado.

Esto funciona porque estamos tratando stuff como una matriz asociativa y valores añadidos a ella

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

+2

Esto no explica por qué 'stuff.push ({'name': $ (this) .attr ('checked')});' funciona. Honestamente, no debería. –

11

así que es fácil)))

este reloj ...

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

y usted tendrá:

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

O:

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

, dispondrá de:

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

O:

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

, dispondrá de:

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

Esto es realmente fácil: Ejemplo

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

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