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


69

我正在通过“复选框”类型的几个输入元素进行循环。之后,我将值和检查的属性添加到数组。这是我的代码:

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

编辑:

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


如果您确实按照描述的那样初始化“东西”,那么第二个例子就不可能起作用。
Pointy

也许我已经尝试了将东西初始化为“ var stuff = [];”的示例。我认为您是对的,是…
dperitch 2011年

Answers:


135

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

它与jQuery没有任何关系。

你要定义一个文本对象

// 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

18

所以很容易)))

看这个...

    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}

13

stuff是一个对象,push是数组的方法。所以你不能使用stuff.push(..)

假设您将其定义stuff为数组,stuff = []; 然后可以对其调用push方法。

这是可行的,因为object [key / value]的格式正确。

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

而由于对象的格式不正确,这将无法正常工作。

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

之所以有效,是因为我们将其stuff视为关联数组并为其添加了值

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


2
这不能解释为什么stuff.push( {'name':$(this).attr('checked')} );有效。老实说,不应该。
约瑟夫·席尔伯

8

这真的很容易:示例

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.