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 !

3voto

Saad Patel Points 49

Si quelqu'un cherche à créer un JSON similaire, mais sans utiliser cart comme un tableau, voici :

J'ai un tableau d'objets myArr :

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

3voto

A. Genedy Points 320

En ES9, vous pouvez ajouter plusieurs éléments à un objet en utilisant la syntaxe de propagation d'objet, ce qui permet d'éviter le code répété :

let myObj = { 
  name: "John", 
  age: 30,
};

myObj = {
  ...myObj, // étendre les éléments originaux de myObj
  city: "New York", 
  country: "USA",
};

console.log(myObj); // { name: "John", age: 30, city: "New York", country: "USA" }

Dans cet exemple, nous avons ajouté deux nouvelles propriétés city et country à l'objet myObj en utilisant la syntaxe de propagation d'objet.

2voto

Ivan Ferrer Points 325
 fonction addValueInObject(valeur, objet, clé) {

    var ajouterPlusOptions = eval('{"'  + clé + '":' +  valeur + '}');

    if(ajouterPlusOptions != null) {
        var texteObjet = JSON.stringify(objet);
        texteObjet = texteObjet.substring(1,texteObjet.length-1);
        var AjouterElement = JSON.stringify(ajouterPlusOptions);
        objet = eval('{' + texteObjet + ',' +  AjouterElement.substring(1,AjouterElement.length-1) + '}');
    }
    return objet;
}

addValueInObject('sdfasfas', votreObjet, 'nomdelacle');

OU :

var obj = {'clé':'valeur'};

obj.clé2 = 'valeur2';

2voto

ganesh Points 435

Push est une méthode des tableaux, donc pour les objets, vous pouvez obtenir l'indice du dernier élément, et vous pouvez probablement faire le même travail que push pour les objets comme ci-dessous

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

puis ajouter l'objet au nouvel indice de l'élément

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

2voto

Dave Points 47

Pour ceux qui cherchent encore une solution, je pense que les objets auraient dû être stockés dans un tableau comme...

var element = {}, panier = [];
element.id = id;
element.quantité = quantité;
panier.push(element);

Ensuite, lorsque vous voulez utiliser un élément comme un objet, vous pouvez faire ceci...

var element = panier.find(function (el) { return el.id === "id_que_nous_voulons";});

Mettez une variable à "id_que_nous_voulons" et donnez-lui l'identifiant de l'élément que nous voulons de notre tableau. Un objet "element" est retourné. Bien sûr, nous n'avons pas besoin d'utiliser l'identifiant pour trouver l'objet. Nous pourrions utiliser une autre propriété pour faire la recherche.

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