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 !

2voto

Kamil Kiełczewski Points 6496

Ma proposition est d'utiliser une structure de données différente de celle proposée dans d'autres réponses - cela vous permet de faire un push sur card.elements et de permettre d'étendre les propriétés de la carte :

let card = {
  elements: [
    {"id":10,"quantity":1}
  ],

  //autres champs de la carte comme 'propriétaire' ou autre chose...
}

card.elements.push({"id":22,"quantity":3})

console.log(card);

1voto

Si vous ne savez pas comment faire une boucle en JS, par exemple, cela peut être une solution de passer la tâche à PHP pour qu'il le fasse pour vous

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

Ce concept peut vous être utile

1voto

user8271796 Points 11

C'est une vieille question, de toute façon aujourd'hui la meilleure pratique est d'utiliser Object.defineProperty

const object1 = {};

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

object1.property1 = 77;
// lance une erreur en mode strict

console.log(object1.property1);
// sortie attendue: 42

1voto

Ahmmad Ismail Points 383

Peut-être que tout le monde a pris cela pour acquis :

const array = new Array("Saab", "Volvo");
const object_as_value = new Object({firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"});

function function_returns(){
    return "value 2"
}

var obj = {
    key1: array,
    key2: object_as_value,
    key3: function_returns()
}

console.log(obj)

Form a article de blog:

La fonctionnalité des noms de propriété calculés ES6 vous permet d'assigner une expression en tant que nom de propriété à un objet dans la notation d'objet littéral. Il n'est pas nécessaire de créer un objet d'abord.

Vous pouvez également utiliser des littéraux de gabarit (interpolation de chaînes) comme une expression pour les noms de propriété calculés :

const key = 'name';
const value = 'Atta';
> 
const user = {
    [key + '34']: value
};

console.log(user.name34); // Atta

Veuillez également consulter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#computed_property_names

0voto

alaferg Points 187

Si quelqu'un d'autre en a besoin, j'ai enfin trouvé un bon moyen d'ajouter des objets ou des tableaux d'objets :

var myobj = {}

// Ces deux options ne fonctionnent que pour les clés à valeur unique, pas pour les tableaux ou les objets
myobj["a"] = 1
myobj.b = 2

// Celui-ci fonctionne pour tout :
Object.assign(myobj, {"clé": "valeur"});  // valeur unique

// Ajouter un objet
Object.assign(myobj, {"sous-objet": 
  {
    "c": 3
  }
});

// Ajouter un tableau d'objets
Object.assign(myobj, {"sous-tab": 
  [
    {
      "d": 4,
    },
    {
      "e": 5
    }
  ]
});

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