Agregar elementos al objeto
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.push
para 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!
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}]"
La línea de código siguiente se define element
como 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'}
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.
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}}
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 } }