2011-08-31 7 views
54

私は 'checkbox'タイプの入力要素をいくつか使ってループを行っています。その後、配列に値とチェック属性を追加します。これは私のコードです:.push()メソッドを使ってオブジェクトに項目を追加する

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オブジェクトの単なるメソッドです。

+0

説明したように実際に「stuff」を初期化する場合は、2番目の例が機能しない可能性があります。 – Pointy

+0

多分私はstuffが "var stuff = [];"として初期化されたときにその例を試してみました。私はあなたが正しいと思います... – dperitch

答えて

117

.push()に連想配列と付加価値がBuilt-in Array Object

それ方法であるとして、我々はstuffを処理しているので、これが動作

関連していないどのような方法でもjQuery。

は、あなたがこの

// Array 
var stuff = []; 

その後、

stuff.push(element); 

のようにリテラル アレイを定義することができます

// Object 
var stuff = {}; 

でリテラルオブジェクトを定義しています

配列は、実際にはブラケット構文stuff[index]を親であるObjectから継承しています。このため、最初の例のように使用することができます。

これは、多くの場合、動的な特性

stuff = {}; // Object 

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

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

stuffはオブジェクトであり、pushは配列のメソッドです。 stuff.push(..)を使用することはできません。

あなたは、あなたがそれにpushメソッドを呼び出すことができ、アレイ​​としてstuffを定義するとしましょう。

[キー/値]オブジェクトが整形式であるために機能します。オブジェクトがうまく形成されていないため、この一方

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

は動作しません。それ

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

+2

これは、 'stuff.push({'name':$(this).attr( 'checked')});'がなぜ動作するのか説明していません。正直、そうすべきではありません。 –

11

にアクセスするための楽な反射のために使用されているので、それは簡単です)))

この時計...

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} 
2

これは本当に簡単です: 例

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

//add element 
sendData['field3'] = value3; 
関連する問題