2012-01-22 19 views
6

Esto es lo que estoy tratando de construir a través de JavaScript en el punto o la notación []:asignación de valores a JSON objetos en Javascript

var shoppingCart = { 
     'item1' : { 
      'description' : 'This is item #1', 
      'price' : 10, 
      'quantity' : 1, 
      'shipping' : 0, 
      'total' : 10 
     } 
    }; 

Ahora bien, si 'elemento1' es el nombre de la variable itemName.

Esto funciona:
var shoppingCart = {};
shoppingCart[itemName] = itemName;
alert(shoppingCart.item1);

que devuelve item1

Pero esto no funciona:
1 var shoppingCart = {};
2 shoppingCart[itemName]['description'] = 'This is Item #1';

JS simplemente muere en la línea 2, ¿por qué? y ¿cómo asigno el valor de la descripción a 'descripción'?

lo haría así:

var shoppingCart = { 
     itemName : { 
      'description' : description, 
      'price' : price, 
      'quantity' : quantity, 
      'shipping' : shipping, 
      'total' : total 
     } 
    }; 

... pero hace que la tecla literalmente itemName en lugar de item1.

Respuesta

10

shoppingCart[itemName] no existe.
Es necesario crear primero:

var shoppingCart = {}; 
shoppingCart[itemName] = { }; 
shoppingCart[itemName].description = 'This is Item #1'; 

O, mejor aún:

var shoppingCart = {}; 
shoppingCart[itemName] = { description: 'This is Item #1' }; 
+0

gracias por la respuesta rápida – phpKid

+1

También 'shoppingCart [itemName] ['description']' es equivalente a 'shoppingCart [itemName] .description'. Solo tiene que acceder a las propiedades con '[]' cuando accede de forma dinámica a 'obj [propNameString]' o cuando contiene caracteres ilegales para notaton de punto 'obj ['some-prop-name']' –

+0

Sí, entonces eso es lo que leo en todas partes, pero la clave es 'shoppingCart [itemName] = {};' ¡Cada vez entiendo más los objetos! – phpKid

1

No funciona porque, en su segundo ejemplo, que está tratando de índice de un objeto en blanco con una clave que no ha sido establecida. Lo siguiente funcionará ...

var shoppingCart = {}; 
shoppingCart[itemName] = {}; 
shoppingCart[itemName]['description'] = '...'; 

Porque ahora shoppingCart [itemName] es en realidad un objeto.

+0

thnx para la respuesta rápida – phpKid

2

En javascript, los objetos no se crean automáticamente en el acceso de miembros; usted tiene que crear el objeto en primer lugar:

var shoppingCart = {}; 
shoppingCart["item1"] = {}; // This creates the object 
shoppingCart["item1"]["description"] = "This is item #1"; // add a member 

Nota Puede, por supuesto, también crean la totalidad del objeto a la vez con

shoppingCart[itemname] = { "description": description, 
          "price": price, 
          "quantity": quantity, 
          "shipping": shipping, 
          "total": total }; 
+0

sí, está bien, estoy viendo cómo funcionan estos obj ahora – phpKid

0

Para su información, solución alternativa:

var itemName = {}; 
itemName.description = 'This is Item #1'; 
var shoppingCart = {}; 
shoppingCart.itemName = itemName; 

o simplemente

var shoppingCart = {}; 
shoppingCart.itemName = { description: 'This is Item #1' };