Soru Bir nesneye .push () yöntemiyle nesne ekleme


'Checkbox' tipinin birkaç giriş elemanı ile bir döngü yapıyorum. Bundan sonra, değerler ekliyorum ve özellikleri bir diziye ekledim. Bu benim kodum:

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

Bu iyi çalışıyor, ama sadece Jquery'de .push () yöntemiyle aynı şeyi yapıp yapamayacağımı merak ediyorum.

Böyle bir şey denedim ama işe yaramıyor:

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

Düzenle:

Object üzerinde .push () yöntemini kullanmaya çalışıyordum, ancak .push () aslında yalnızca bir Array Object yöntemidir.


56
2017-08-31 18:10


Menşei


İkinci örneğiniz, anlattığınız gibi "malzeme" yi gerçekten başlatıyorsanız işe yaramaz. - Pointy
belki de "var stuff = [];" gibi şeyler başlatıldığında bu örneği denedim. Bence haklısın, evet ... - dperitch


Cevaplar:


.push() bir yöntemidir Yerleşik Dizi Nesnesi

Herhangi bir şekilde jQuery ile ilgili değildir.

Bir değişmez tanımlıyorsunuz Nesne ile

// Object
var stuff = {};

Bir değişmez tanımlayabilirsiniz Dizi bunun gibi

// Array
var stuff = [];

sonra

stuff.push(element);

Diziler aslında onların parantez sözdizimini alır stuff[index] ebeveynlerinden miras alınan Nesne. Bu yüzden ilk örneğinizde olduğunuz şekilde kullanabilirsiniz.

Bu özellik, dinamik olarak özelliklere erişmek için zahmetsiz yansıma için kullanılır

stuff = {}; // Object

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

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

119
2017-08-31 18:13





çok kolay)))

Şunu izle...

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

Ve sahip olacaksın:

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

Veya:

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

Sahip olacaksın:

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

Veya:

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

Sahip olacaksın:

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

12
2017-07-06 13:24





stuff bir nesnedir ve push bir dizi bir yöntemdir. Yani kullanamazsın stuff.push(..).

Tanımladığınızı söyleyelim stuff bir dizi olarak stuff = [];  o zaman arayabilirsin push üzerinde yöntem.

Bu, [anahtar / değer] nesnesi iyi oluşturulduğu için çalışır.

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

Oysa bu işe yaramaz çünkü nesne iyi oluşturulmamıştır.

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

Bu çalışıyor çünkü biz tedavi ediyoruz stuff ilişkisel bir dizi olarak ve buna değerler ekledi

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


12
2017-08-31 18:12



Bu nedenini açıklamıyor stuff.push( {'name':$(this).attr('checked')} ); Eserleri. Dürüst olmak gerekirse, yapmamalı. - Joseph Silber


Bu gerçekten çok kolay: Örnek

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

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

2
2018-04-17 20:51





Bunu yapmanın başka bir yolu:

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

Daha fazla bilgi edinin: Object.assign ()


0
2017-08-04 17:17