web-dev-qa-db-fra.com

Ajout d'éléments à un objet

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!

185
HypeZ

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}]" 
243
Konstantin Dinev

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().

134
Sirko

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 } }
18
Craig MacGregor

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

6
Melvin Chipimo

vous devriez écrire var element = [];
en javascript {} est un objet vide et [] est un tableau vide.

5
shift66
cart.Push({"element":{ id: id, quantity: quantity }});
4
Cris
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é.

3
pashifika

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);
3
user3910831

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.

2
Dave

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;
                    });
2
Saad Patel
 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';
1
Ivan Ferrer

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 };
1
ganesh

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

1
user7986029

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()

0
Thakur Karthik