web-dev-qa-db-fra.com

Ajout d'éléments à un objet via la méthode .Push ()

Je fais une boucle à travers quelques éléments d'entrée de type "case à cocher". Après cela, j'ajoute des valeurs et des attributs vérifiés à un tableau. Ceci est mon code:

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

Cela fonctionne bien, mais je me demande si je peux faire exactement la même chose avec la méthode .Push () dans Jquery?

J'ai essayé quelque chose comme ça mais ça ne marche pas:

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

Edit:

J'essayais d'utiliser la méthode .Push () sur Object, mais .Push () n'est en réalité qu'une méthode de Array Object.

63
dperitch

.Push() est une méthode de objet de tableau intégré

Cela n’a aucun lien avec jQuery.

Vous définissez un objet littéral avec

// Object
var stuff = {};

Vous pouvez définir un littéral Array comme ceci

// Array
var stuff = [];

ensuite

stuff.Push(element);

Les tableaux ont en fait leur syntaxe entre crochets stuff[index] héritée de leur parent, Object. C'est pourquoi vous pouvez l'utiliser comme vous le faites dans votre premier exemple.

Ceci est souvent utilisé pour une réflexion sans effort pour un accès dynamique aux propriétés

stuff = {}; // Object

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

stuff.prop === stuff['prop']; // true
125
jondavidjohn

stuff est un objet et Push est une méthode d'un tableau. Vous ne pouvez donc pas utiliser stuff.Push(..).

Disons que vous définissez stuff comme un tableau stuff = [];vous pouvez alors appeler la méthode Push.

Cela fonctionne car l'objet [clé/valeur] est bien formé.

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

Considérant que cela ne fonctionnera pas parce que l'objet n'est pas bien formé.

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

Cela fonctionne parce que nous traitons stuff comme un tableau associatif auquel nous avons ajouté des valeurs.

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

13
ShankarSangoli

donc c'est facile)))

Regarde ça...

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

Et vous aurez:

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

Ou:

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

Tu vas avoir:

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

Ou:

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

Tu vas avoir:

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

Une autre façon de le faire serait:

stuff = Object.assign(stuff, {$(this).attr('value'):$(this).attr('checked')});

Lisez plus ici: Object.assign ()

4
Niklas Jarl

C'est vraiment facile: Exemple

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

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