323 votes

Ajout d'éléments à un objet

Je dois remplir un fichier JSON, maintenant j'ai quelque chose comme ceci :

{"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 objet en utilisant cart = JSON.parse, maintenant j'ai besoin d'ajouter le nouvel élément. Je suppose que je dois 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 obtenu une erreur "Object has no method push" lorsque j'ai essayé de faire element.push, et je pense que je fais quelque chose DE TRÈS mal car je ne mentionne nulle part l'"élément".

Comment puis-je faire ça ?

Édition : désolé à tous, j'avais BEAUCOUP de confusion dans ma tête.

Je pensais que je ne pouvais obtenir que le type d'objet en prenant des données à partir de JSON.parse, mais j'obtiens ce que j'ai mis dans le JSON en premier lieu.

Remplacer un tableau par un objet a résolu mon problème, j'ai également utilisé de nombreuses suggestions trouvées ici, merci à tous !

400voto

Votre élément n'est pas un tableau, cependant votre panier doit être un tableau pour prendre en charge de nombreux objets élémentaires. Exemple de code :

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

Si vous souhaitez que le panier soit un tableau d'objets sous la forme { element: { id: 10, quantity: 1} }, alors effectuez :

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}]"

233voto

Sirko Points 32515

La ligne de code ci-dessous définit element comme un objet simple.

let element = {}

Ce type d'objet JavaScript avec {} autour de lui n'a pas de méthode push(). Pour ajouter de nouveaux éléments à un objet comme celui-ci, utilisez cette syntaxe:

element[votreClé] = votreValeur

Pour récapituler, voir l'exemple ci-dessous:

let element = {} // crée un objet vide

/* --- Ajouter des choses à l'objet --- */

element['active'] = true // 'active' est la clé et 'true' est la valeur
console.log(element) // Résultat attendu -> {active: true}

element['state'] = 'slow' // 'state' est la clé et 'slow' est la valeur
console.log(element) // Résultat attendu -> {active: true, state: 'slow'}

En revanche, si vous avez défini l'objet comme un tableau (c'est-à-dire en utilisant [] au lieu de {}), alors vous pouvez ajouter de nouveaux éléments en utilisant la méthode push().

32voto

Melvin Chipimo Points 211

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:

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

26voto

Craig MacGregor Points 1588

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 comme clé:

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

Cela vous permet d'ajouter plusieurs articles au panier de la manière suivante:

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

// Le panier est maintenant:
// { "1": { quantity: 5 }, "2": { quantity: 10 } }

20voto

Banzy Points 1

Ajout de nouveaux éléments clé/valeur dans l'object original :

const obj = { a:1, b:2 }
const add = { c:3, d:4, e: ['x','y','z'] }

Object.entries(add).forEach(([key,value]) => { obj[key] = value })

obj nouvelle valeur :

{a: 1, b: 2, c: 3, d: 4, e: ['x', 'y', 'z'] }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X