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 debía usar 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 diciendo el "elemento" en ninguna parte.
¿Cómo puedo hacer eso?
Editar: lo siento por todo lo que tenía mucha confusión en mi cabeza.
Pensé que solo podía obtener el tipo de objeto al tomar datos JSON.parse
, pero en primer lugar obtengo lo que puse en el JSON.
Poner una matriz en lugar de un objeto resolvió mi problema, también utilicé muchas sugerencias, ¡gracias a todos!
fuente
Respuestas:
Su elemento no es una matriz, sin embargo, su carrito debe ser una matriz para admitir muchos objetos de elemento. Ejemplo de código:
Si desea que el carrito sea una matriz de objetos en el formulario
{ element: { id: 10, quantity: 1} }
, realice:JSON.stringify()
fue mencionado como una preocupación en el comentario:fuente
Con esa fila
usted define
element
para ser un objeto simple. El objeto JavaScript nativo no tienepush()
método. Para agregar nuevos elementos a un objeto plano, use esta sintaxis:Por otro lado, podría definir
element
como una matriz utilizandoLuego puede agregar elementos usando
push()
.fuente
element[ yourKey ] = yourValue;
es la mejor manera de agregar elementos a un objeto.element[ yourkey ] = [ element{yourkey], yourNewValue ];
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 la ID como clave:
Esto le permite agregar múltiples artículos al carrito de la siguiente manera:
fuente
Para anexar a un objeto use
Object.assign
Salida:
fuente
element
, por lo que solo tendrá el último elemento.Estaba leyendo algo relacionado con este intento si es útil.
1. Defina una función de inserción dentro de un objeto.
Ahora puedes empujar elementos como una matriz
Esto producirá este objeto
Observe que los elementos se agregan con índices y también vea que hay una nueva propiedad de longitud agregada al objeto. Esto será útil para encontrar la longitud del objeto también. Esto funciona debido a la naturaleza genérica de la
push()
funciónfuente
debe escribir
var element = [];
en javascript
{}
es un objeto vacío y[]
es una matriz vacía.fuente
fuente
Este código está trabajado.
fuente
Prueba esto:
fuente
Agregar nuevos elementos clave / par en el objeto original:
obj nuevo valor:
fuente
Si alguien busca crear un JSON similar, simplemente sin usarlo
cart
como una matriz, aquí va:Tengo una variedad de objetos
myArr
como:e intentaré crear un JSON con la siguiente estructura:
simplemente puedes hacer-
fuente
cart[key]=value
básicamente es un mapa de valores clave. Votar si la respuesta fue útil. ¡Gracias!Para cualquiera que todavía esté buscando una solución, creo que los objetos deberían haberse almacenado en una matriz como ...
Luego, cuando desee utilizar un elemento como un objeto, puede hacer esto ...
Pon una variable en "id_that_we_want" y dale la identificación del elemento que queremos de nuestra matriz. Se devuelve un objeto "elemnt". Por supuesto, no tenemos que identificarnos para encontrar el objeto. Podríamos usar cualquier otra propiedad para hacer el hallazgo.
fuente
O:
fuente
push es un método de matrices, por lo que para el objeto puede obtener el índice del último elemento, y probablemente pueda hacer el mismo trabajo que push para el objeto como se muestra a continuación
luego agregue el objeto al nuevo índice del elemento
fuente
si no diseñas para hacer un bucle en JS, por ejemplo, pasa a PHP para hacer un bucle por ti
este concepto puede ayudar un poco
fuente
Esta es una vieja pregunta, de todos modos hoy en día la mejor práctica es usar Object.defineProperty
fuente