Agregar elementos al objeto

Resuelto HypeZ asked hace 11 años • 21 respuestas

Necesito completar un archivo json, ahora tengo algo como esto:

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

Y necesito agregar otro "elemento". Mi primer paso es poner ese json en un tipo de objeto usando cart = JSON.parse, ahora necesito agregar el nuevo elemento. Supuse que debo usarlo cart.pushpara agregar otro elemento, probé esto:

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

Pero recibí el error "El objeto no tiene método de inserción" cuando intento hacerlo element.push, y creo que estoy haciendo algo MUY mal porque no estoy indicando el "elemento" en ninguna parte.

¿Cómo puedo hacer eso?

Editar: perdón a todos, tenía MUCHA confusión en mi cabeza.

Pensé que solo podía obtener el tipo de objeto al tomar datos de JSON.parse, pero en primer lugar obtengo lo que puse en el JSON.

Poner una matriz en lugar de un objeto resolvió mi problema, utilicé muchas sugerencias aquí también, ¡gracias a todos!

HypeZ avatar Jan 09 '13 18:01 HypeZ
Aceptado

Su elemento no es una matriz; sin embargo, su carrito debe ser una matriz para admitir muchos objetos de elementos. Ejemplo de código:

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

Si desea que el carrito sea una serie de objetos en el formulario, { element: { id: 10, quantity: 1} }realice:

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

JSON.stringify()fue mencionado como una preocupación en el comentario:

>> JSON.stringify([{a: 1}, {a: 2}]) 
      "[{"a":1},{"a":2}]" 
Konstantin Dinev avatar Jan 09 '2013 11:01 Konstantin Dinev

La línea de código siguiente se define elementcomo un objeto simple.

let element = {}

Este tipo de objeto JavaScript {}alrededor no tiene push()método. Para agregar nuevos elementos a un objeto como este, use esta sintaxis:

element[yourKey] = yourValue

Para ponerlo todo junto, vea el siguiente ejemplo:

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'}
Expandir fragmento

Por otro lado, si definiste el objeto como una matriz (es decir, usando []en lugar de {}), entonces puedes agregar nuevos elementos usando el push()método.

Sirko avatar Jan 09 '2013 11:01 Sirko

Para agregar a un objeto useObject.assign

var ElementList ={}

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

Producción:

{"elemento":{"id":10,"cantidad":1},"elemento":{"id":11,"cantidad":2}}

Melvin Chipimo avatar Apr 25 '2019 13:04 Melvin Chipimo

Si el carrito debe almacenarse como un objeto y no como una matriz (aunque recomendaría almacenarlo como []), siempre puede cambiar la estructura para usar el ID como clave:

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

Esto le permite agregar varios artículos al carrito de la siguiente manera:

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

// Cart is now:
// { "1": { quantity: 5 }, "2": { quantity: 10 } }
Craig MacGregor avatar Jan 09 '2013 12:01 Craig MacGregor