Je dois remplir un fichier JSON, maintenant j'ai quelque chose comme ça:
{"element":{"id":10,"quantity":1}}
Et j'ai besoin d'ajouter un autre "élément". Ma première étape consiste à mettre ce JSON dans un type Object en utilisant cart = JSON.parse
, maintenant je dois ajouter le nouvel élément. J'ai supposé que je devais utiliser cart.Push
pour ajouter un autre élément, j'ai essayé ceci:
var element = {};
element.Push({ id: id, quantity: quantity });
cart.Push(element);
Mais j'ai l'erreur "L'objet n'a pas de méthode Push" quand j'essaie de faire element.Push
, et je pense que je fais quelque chose de TRÈS faux parce que je ne dis nulle part l'élément.
Comment puis je faire ça?
Edit: désolé pour tous j'avais beaucoup de confusion dans la tête.
Je pensais que je ne pouvais obtenir que le type d'objet lorsque je prenais des données de JSON.parse
, mais je reçois ce que j'ai mis dans le JSON en premier lieu.
Mettre un tableau au lieu d’un objet a résolu mon problème, j’ai utilisé beaucoup de suggestions ici aussi, merci à tous!
Votre élément n'est pas un tableau. Cependant, votre panier doit être un tableau pour pouvoir prendre en charge de nombreux objets d'élément. Exemple de code:
var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.Push(element);
Si vous voulez que cart soit un tableau d'objets de la forme { element: { id: 10, quantity: 1} }
, effectuez les opérations suivantes:
var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.Push({element: element});
JSON.stringify()
a été mentionné comme une préoccupation dans le commentaire:
>> JSON.stringify([{a: 1}, {a: 2}])
"[{"a":1},{"a":2}]"
Avec cette rangée
var element = {};
vous définissez element
comme un objet simple. L'objet JavaScript natif n'a pas de méthode Push()
. Pour ajouter de nouveaux éléments à un objet brut, utilisez cette syntaxe:
element[ yourKey ] = yourValue;
D'autre part, vous pouvez définir element
comme un tableau à l'aide de
var element = [];
Ensuite, vous pouvez ajouter des éléments en utilisant Push()
.
Si le panier doit être stocké en tant qu'objet et non en tant que tableau (bien que je recommande de stocker en tant que []), vous pouvez toujours modifier la structure pour utiliser l'ID en tant que clé:
var element = { quantity: quantity };
cart[id] = element;
Cela vous permet d'ajouter plusieurs articles au panier, comme ceci:
cart["1"] = { quantity: 5};
cart["2"] = { quantity: 10};
// Cart is now:
// { "1": { quantity: 5 }, "2": { quantity: 10 } }
Pour ajouter à un objet, utilisez Object.assign
var ElementList ={}
function addElement (ElementList, element) {
let newList = Object.assign(ElementList, element)
return newList
}
console.log(ElementList)
Sortie:
{"élément": {"id": 10, "quantité": 1}, "élément": {"id": 11, "quantité": 2}}
vous devriez écrire var element = [];
en javascript {}
est un objet vide et []
est un tableau vide.
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;
}
ce code est travaillé.
Essaye ça:
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);
Pour ceux qui cherchent encore une solution, je pense que les objets auraient dû être stockés dans un tableau comme ...
var element = {}, cart = [];
element.id = id;
element.quantity = quantity;
cart.Push(element);
Ensuite, lorsque vous souhaitez utiliser un élément en tant qu'objet, vous pouvez le faire ...
var element = cart.find(function (el) { return el.id === "id_that_we_want";});
Mettez une variable à "id_that_we_want" et donnez-lui l'id de l'élément que nous voulons dans notre tableau. Un objet "elemnt" est renvoyé. Bien sûr, nous n'avons pas à nous identifier pour trouver l'objet. Nous pourrions utiliser n'importe quelle autre propriété pour faire la recherche.
Si quelqu'un cherche à créer un JSON similaire, sans utiliser cart
comme tableau, voici:
J'ai un tableau d'objets myArr
comme:
var myArr = [{resourceType:"myRT",
id: 1,
value:"ha"},
{resourceType:"myRT",
id: 2,
value:"he"},
{resourceType:"myRT",
id: 3,
value:"Li"}];
et je vais essayer de créer un JSON avec la structure suivante:
{
"1":{"resourceType":"myRT","id":"1","value":"ha"},
"2":{"resourceType":"myRT","id":"2","value":"he"},
"3":{"resourceType":"myRT","id":"3","value":"Li"}
}
vous pouvez simplement faire-
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');
OU:
var obj = {'key':'value'};
obj.key2 = 'value2';
Push est une méthode de tableaux. Ainsi, pour objet, vous pouvez obtenir l'index du dernier élément et probablement effectuer le même travail que Push pour objet, comme indiqué ci-dessous.
var lastIndex = Object.keys(element)[Object.keys(element).length-1];
puis ajouter un objet au nouvel index de l'élément
element[parseInt(lastIndex) +1] = { id: id, quantity: quantity };
si vous ne souhaitez pas faire de boucle dans JS, par exemple, passer à PHP pour faire une boucle pour vous
let decision = {}
decision[code+'#'+row] = event.target.value
ce concept peut aider un peu
Je lisais quelque chose en rapport avec cet essai si cela est utile.
1.Définissez une fonction Push dans un objet.
let obj={Push:function Push(element){ [].Push.call(this,element)}};
Maintenant, vous pouvez pousser des éléments comme un tableau
obj.Push(1)
obj.Push({a:1})
obj.Push([1,2,3])
Cela va produire cet objet
obj={
0: 1
1: {a: 1}
2: (3) [1, 2, 3]
length: 3
}
Notez que les éléments sont ajoutés avec des index et qu'une nouvelle propriété length est également ajoutée à l'objet. Cela sera utile pour trouver la longueur de l'objet également. Cela fonctionne en raison du caractère générique de la fonction Push()