「チェックボックス」タイプのいくつかの入力要素をループ処理しています。その後、値とチェックされた属性を配列に追加します。これは私のコードです:
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のメソッドです。
JQueryとは一切関係ありません。
リテラルObjectを定義しています
// Object
var stuff = {};
このようにリテラルArrayを定義できます
// Array
var stuff = [];
それから
stuff.Push(element);
配列は、親であるObjectから継承されたブラケット構文stuff[index]
を実際に取得します。これが、最初の例のように使用できる理由です。
これは、プロパティに動的にアクセスするための簡単なリフレクションによく使用されます
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
メソッドを呼び出すことができます
これは、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');
簡単です)))
これを見て...
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}
別の方法は次のとおりです。
stuff = Object.assign(stuff, {$(this).attr('value'):$(this).attr('checked')});
詳細はこちら: Object.assign()
これは本当に簡単です:例
//my object
var sendData = {field1:value1, field2:value2};
//add element
sendData['field3'] = value3;