私は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に入れたものを取得しました。
オブジェクトではなく配列を使用することで私の問題は解決しましたが、ここでも多くの提案を使用しました。ありがとうございました。
あなたの要素は配列ではありません、しかしあなたのカートは多くの要素オブジェクトをサポートするために配列である必要があります。コード例:
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}]"
その行で
var element = {};
あなたはelement
を普通のオブジェクトとして定義します。ネイティブのJavaScriptオブジェクトにはPush()
メソッドはありません。プレーンなオブジェクトに新しいアイテムを追加するには、次の構文を使います。
element[ yourKey ] = yourValue;
一方で、element
を配列として定義することができます。
var element = [];
それからPush()
を使って要素を追加できます。
カートを配列ではなくオブジェクトとして格納する必要がある場合([]として格納することをお勧めしますが)、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 } }
あなたはvar element = [];
を書くべきです
javascriptの {}
は空のオブジェクトで、[]
は空の配列です。
cart.Push({"element":{ id: id, quantity: quantity }});
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;
}
このコードはうまくいきました。
これを試して:
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);
オブジェクトに追加するには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}}
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;
});
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';
Pushは配列のメソッドなので、objectの場合は最後の要素のインデックスを取得することができます。そして、おそらく次のようにPush for objectと同じ仕事をすることができます。
var lastIndex = Object.keys(element)[Object.keys(element).length-1];
それから要素の新しいインデックスにオブジェクトを追加します
element[parseInt(lastIndex) +1] = { id: id, quantity: quantity };
まだ解決策を探している人のために、私はオブジェクトがのような配列に格納されるべきだったと思います...
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を使う必要はありません。他のプロパティを使って検索することもできます。
jSでループするように設計していない場合ループをするためにPHPに渡してください
let decision = {}
decision[code+'#'+row] = event.target.value
この概念は少し役に立つかもしれません
役に立つなら、この試みに関連した何かを読んでいた。
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()
関数の一般的な性質により機能します