web-dev-qa-db-ja.com

オブジェクトに要素を追加する

私はJSONファイルを作成する必要があります、今私はこのようなものがあります:

{"element":{"id":10,"quantity":1}}

そして私は別の "要素"を追加する必要があります。私の最初のステップはcart = JSON.parseを使用してそのjsonをObject型に入れることです。今度は新しい要素を追加する必要があります。私はcart.Pushを使って別の要素を追加しなければならないと思いました、私はこれを試しました:

var element = {};
element.Push({ id: id, quantity: quantity });
cart.Push(element);

しかし、element.Pushを実行しようとすると、エラー「オブジェクトにはメソッドPushがありません」が表示され、「要素」をどこにも指定していないので、非常に悪いことをしていると思います。

どうやってやるの?

編集: 頭の中にたくさんの混乱がありました。

JSON.parseからデータを取得するときにはオブジェクト型しか取得できないと思いましたが、最初にJSONに入れたものを取得しました。

オブジェクトではなく配列を使用することで私の問題は解決しましたが、ここでも多くの提案を使用しました。ありがとうございました。

171
HypeZ

あなたの要素は配列ではありません、しかしあなたのカートは多くの要素オブジェクトをサポートするために配列である必要があります。コード例:

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.Push(element);

Cartを{ element: { id: 10, quantity: 1} }の形式のオブジェクトの配列にしたい場合は、次のように実行します。

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.Push({element: element});

コメントの中でJSON.stringify()が懸念事項として挙げられています。

>> JSON.stringify([{a: 1}, {a: 2}]) 
      "[{"a":1},{"a":2}]" 
225

その行で

var element = {};

あなたはelementを普通のオブジェクトとして定義します。ネイティブのJavaScriptオブジェクトにはPush()メソッドはありません。プレーンなオブジェクトに新しいアイテムを追加するには、次の構文を使います。

element[ yourKey ] = yourValue;

一方で、elementを配列として定義することができます。

var element = [];

それからPush()を使って要素を追加できます。

124
Sirko

カートを配列ではなくオブジェクトとして格納する必要がある場合([]として格納することをお勧めしますが)、IDをキーとして使用するように構造をいつでも変更できます。

var element = { quantity: quantity };
cart[id] = element;

これにより、複数の商品をカートに追加できます。

cart["1"] = { quantity: 5};
cart["2"] = { quantity: 10};

// Cart is now:
// { "1": { quantity: 5 }, "2": { quantity: 10 } }
17
Craig MacGregor

あなたはvar element = [];を書くべきです
javascriptの {}は空のオブジェクトで、[]は空の配列です。

5
shift66
cart.Push({"element":{ id: id, quantity: quantity }});
4
Cris
function addValueInObject(object, key, value) {
    var res = {};
    var textObject = JSON.stringify(object);
    if (textObject === '{}') {
        res = JSON.parse('{"' + key + '":"' + value + '"}');
    } else {
        res = JSON.parse('{' + textObject.substring(1, textObject.length - 1) + ',"' + key + '":"' + value + '"}');
    }
    return res;
}

このコードはうまくいきました。

3
pashifika

これを試して:

var data = [{field:"Data",type:"date"},  {field:"Numero",type:"number"}];

var columns = {};

var index = 0;

$.each(data, function() {

    columns[index] = {
        field : this.field,
        type : this.type
    };

    index++;
});

console.log(columns);
3
user3910831

オブジェクトに追加するにはObject.assignを使います。

    var ElementList ={}

    function addElement (ElementList, element) {
        let newList = Object.assign(ElementList, element)
        return newList
    }
    console.log(ElementList) //{"element":{"id":10,"quantity":1},"element":{"id":11,"quantity":2}}
2
Melvin Chipimo

cartを配列として使わずに、誰かが似たようなJSONを作成しようとするなら、ここに行きます:

私はオブジェクトの配列myArrを持っています:

var myArr = [{resourceType:"myRT",
            id: 1,
            value:"ha"},
            {resourceType:"myRT",
            id: 2,
            value:"he"},
            {resourceType:"myRT",
            id: 3,
            value:"Li"}];

そして私は次のような構造のJSONを作成しようとします。

{
 "1":{"resourceType":"myRT","id":"1","value":"ha"},
 "2":{"resourceType":"myRT","id":"2","value":"he"},
 "3":{"resourceType":"myRT","id":"3","value":"Li"}
}

簡単にできます

var cart = {};
myArr.map(function(myObj){
                    cart[myObj.id]= myObj;
                    });
2
Saad Patel
 function addValueInObject(value, object, key) {

        var addMoreOptions = eval('{"'  + key + '":' +  value + '}');

        if(addMoreOptions != null) {
            var textObject = JSON.stringify(object);
            textObject = textObject.substring(1,textObject.length-1);
            var AddElement = JSON.stringify(addMoreOptions);
            object = eval('{' + textObject +','+  AddElement.substring(1,AddElement.length-1) + '}');
        }
        return object;
    }

addValueInObject('sdfasfas', yourObject, 'keyname');

または:

var obj = {'key':'value'};

obj.key2 = 'value2';
1
Ivan Ferrer

Pushは配列のメソッドなので、objectの場合は最後の要素のインデックスを取得することができます。そして、おそらく次のようにPush for objectと同じ仕事をすることができます。

var lastIndex = Object.keys(element)[Object.keys(element).length-1];

それから要素の新しいインデックスにオブジェクトを追加します

element[parseInt(lastIndex) +1] = { id: id, quantity: quantity };
1
ganesh

まだ解決策を探している人のために、私はオブジェクトがのような配列に格納されるべきだったと思います...

var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.Push(element);

あなたがオブジェクトとして要素を使用したいときにあなたはこれを行うことができます...

var element = cart.find(function (el) { return el.id === "id_that_we_want";});

"id_that_we_want"に変数を置き、それに私たちの配列から欲しい要素のIDを渡します。 "elemnt"オブジェクトが返されます。もちろん、オブジェクトを見つけるためにidを使う必要はありません。他のプロパティを使って検索することもできます。

1
Dave

jSでループするように設計していない場合ループをするためにPHPに渡してください

let decision = {}
decision[code+'#'+row] = event.target.value

この概念は少し役に立つかもしれません

1
user7986029

役に立つなら、この試みに関連した何かを読んでいた。

1.オブジェクト内のプッシュ関数を定義します。

let obj={Push:function Push(element){ [].Push.call(this,element)}};

配列のように要素をプッシュできるようになりました

obj.Push(1)
obj.Push({a:1})
obj.Push([1,2,3])

これにより、このオブジェクトが生成されます

obj={
 0: 1
 1: {a: 1}
 2: (3) [1, 2, 3]
 length: 3
}

要素にインデックスが追加され、オブジェクトに新しい長さプロパティが追加されていることにも注目してください。これは、オブジェクトの長さを見つけるのにも役立ちます。これは、Push()関数の一般的な性質により機能します

0
Thakur Karthik