Добавление элементов к объекту с помощью метода .push()
Я делаю цикл через несколько элементов ввода типа 'checkbox'. После этого я добавляю значения и проверяет атрибуты на массив. Это мой код:
var stuff = {};
$('form input[type=checkbox]').each(function() {
stuff[$(this).attr('value')] = $(this).attr('checked');
});
Это отлично работает, но мне просто интересно, могу ли я сделать то же самое с методом .push() в JQuery?
Я пробовал что-то вроде этого, но он не работает:
stuff.push( {$(this).attr('value'):$(this).attr('checked')} );
Edit:
Я пытался использовать метод .push() для Object, но .push() на самом деле является всего лишь методом объекта Array.
Ответы
Ответ 1
.push()
- это метод Встроенный объект массива
Это никак не связано с jQuery.
Вы определяете литерал Object с
// Object
var stuff = {};
Вы можете определить литерал Массив, как этот
// Array
var stuff = [];
то
stuff.push(element);
Массивы фактически получают свой синтаксис привязки stuff[index]
, унаследованный от своего родителя, Object. Вот почему вы можете использовать его так, как вы в первом примере.
Это часто используется для легкого отражения для динамического доступа к свойствам
stuff = {}; // Object
stuff['prop'] = 'value'; // assign property of an
// Object via bracket syntax
stuff.prop === stuff['prop']; // true
Ответ 2
stuff
- это объект, а push
- метод массива. Таким образом, вы не можете использовать stuff.push(..)
.
Предположим, вы определили stuff
как массив stuff = [];
, тогда вы можете вызвать метод push
на нем.
Это работает, потому что объект [ключ/значение] хорошо сформирован.
stuff.push( {'name':$(this).attr('checked')} );
В то время как это не будет работать, потому что объект плохо сформирован.
stuff.push( {$(this).attr('value'):$(this).attr('checked')} );
Это работает, потому что мы рассматриваем stuff
как ассоциативный массив и добавляем к нему значения
stuff[$(this).attr('value')] = $(this).attr('checked');
Ответ 3
так легко)))
Смотрите это...
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}
Ответ 4
Это очень просто:
Пример
//my object
var sendData = {field1:value1, field2:value2};
//add element
sendData['field3'] = value3;