web-dev-qa-db-ja.com

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

編集:

Objectで.Push()メソッドを使用しようとしましたが、実際には.Push()は単なるArray Objectのメソッドです。

62
dperitch

.Push()組み込み配列オブジェクト

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
124
jondavidjohn

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

13
ShankarSangoli

簡単です)))

これを見て...

    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()

4
Niklas Jarl

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

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

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