javascript - Lägga till element i objekt


Jag behöver fylla i en json-fil, just nu har jag något som detta:

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

Och jag behöver lägga till ett annat "element". Mitt första steg är att lägga den json i en Object-typ med cart=JSON.parse, nu behöver jag lägga till det nya elementet. Jag antog att jag måste använda cart.push för att lägga till ett annat element, jag försökte detta:

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

Men jag fick felet "Object has no method push" när jag försökte göra element.push, och jag tror att jag gör något VÄLDIGT fel eftersom jag inte säger något om "element" någonstans.

Hur kan jag göra det?

Redigera: förlåt till alla, jag hade mycket förvirring i huvudet.

Jag trodde att jag bara kunde få objekt typ när jag hämtar data från JSON.parse, men jag får det jag satte in i JSON från början.

Att använda en array istället för ett objekt löste mitt problem, jag använde också många av de förslag som gavs här, tack allihopa!

Svar #1

Ditt element är inte en array, men din kundvagn behöver vara en array för att stödja många elementobjekt. Kodexempel:

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

Om du vill att cart ska vara en array av objekt i formen { element: { id: 10, quantity: 1} } så utför:

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

JSON.stringify() nämndes som en oro i kommentaren:

>> JSON.stringify([{a: 1}, {a: 2}]) 
      "[{"a":1},{"a":2}]" 

Svar #2

Raden med kod nedan definierar element som ett vanligt objekt.

let element = {}

Denna typ av JavaScript-objekt med {} runt sig har ingen push()-metod. För att lägga till nya objekt i ett sådant objekt, använd denna syntax:

element[yourKey] = yourValue

För att sätta ihop allt, se exemplet nedan:

let element = {} // make an empty object

/* --- Add Things To The Object --- */

element['active'] = true // 'active' is the key, and 'true' is the value
console.log(element) // Expected result -> {active: true}


element['state'] = 'slow' // 'state' is the key and 'slow' is the value
console.log(element) // Expected result -> {active: true, state: 'slow'}

Å andra sidan, om du definierade objektet som en array (dvs. med [] istället för {}), kan du sedan lägga till nya element med push()-metoden.

Svar #3

För att lägga till i ett objekt, använd Object.assign

var ElementList ={}

function addElement (ElementList, element) {
    let newList = Object.assign(ElementList, element)
    return newList
}
console.log(ElementList)

Utdata :

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

Svar #4

Om kundvagnen måste lagras som ett objekt och inte som en array (Även om jag skulle rekommendera att lagra som en []) kan du alltid ändra strukturen för att använda ID:t som nyckel:

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

Detta låter dig lägga till flera objekt i kundvagnen på följande sätt:

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

// Cart is now:
// { "1": { quantity: 5 }, "2": { quantity: 10 } }

Svar #5

Lägga till nya nyckel-/värdeelement i det ursprungliga object:

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 nytt värde:

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

Svar #6

Jag läste något relaterat till detta, prova om det är användbart.

1. Definiera en push-funktion inuti ett objekt.

let obj={push:function push(element){ [].push.call(this,element)}};

Nu kan du trycka element som en array

obj.push(1)
obj.push({a:1})
obj.push([1,2,3])

Detta kommer att producera detta objekt

obj={
 0: 1
 1: {a: 1}
 2: (3) [1, 2, 3]
 length: 3
}

Observera att elementen läggs till med index och se också att det finns en ny längdegenskap som lagts till objektet. Detta kommer också att vara användbart för att hitta längden på objektet. Detta fungerar på grund av den generiska naturen hos push()-funktionen.

Relaterade artiklar