通过.push()方法将项目添加到对象

我正在通过“checkbox”types的input元素做一个循环。 之后,我将值和检查属性添加到数组中。 这是我的代码:

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

这工作得很好,但我只是想知道如果我可以用jQuery中的.push()方法做同样的事情?

我试过这样的东西,但它不工作:

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

编辑:

我试图在对象上使用.push()方法,但.push()实际上只是Array对象的一种方法。

.push()内置数组对象的一种方法

这与jQuery没有任何关系。

你正在定义一个文字对象

 // Object var stuff = {}; 

你可以像这样定义一个文字数组

 // Array var stuff = []; 

然后

 stuff.push(element); 

数组实际上得到它们的括号语法stuff[index]从它们的父对象inheritance。 这就是为什么你可以像你在第一个例子中那样使用它。

这通常用于dynamic访问属性的轻松reflection

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

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');

所以很简单)))

看这个…

  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} 

这很简单:例子

 //my object var sendData = {field1:value1, field2:value2}; //add element sendData['field3'] = value3;