2012-01-22 12 views
6

Questo è quello che sto cercando di costruire tramite JavaScript nel punto o notazione []:Assegnazione di valori a JSON oggetti in Javascript

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

Ora, se 'item1' è il nome della variabile itemName.

Questo funziona:
var shoppingCart = {};
shoppingCart[itemName] = itemName;
alert(shoppingCart.item1);

che restituisce item1

Ma questo non funziona:
1 var shoppingCart = {};
2 shoppingCart[itemName]['description'] = 'This is Item #1';

JS muore alla riga 2, perché? e come posso assegnare il valore della descrizione a "descrizione"?

vorrei fare in questo modo:

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

... ma rende la chiave letteralmente itemName invece di item1.

risposta

10

shoppingCart[itemName] non esiste.
È necessario crearlo prima:

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

O, meglio ancora:

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

grazie per la risposta rapida – phpKid

+1

Anche 'shoppingCart [itemName] ['description']' è equivalente a 'shoppingCart [itemName] .description'. Devi solo accedere alle proprietà con '[]' quando le accedi dinamicamente 'obj [propNameString]' o quando contiene caratteri non validi per dot notaton 'obj ['some-prop-name']' –

+0

Sì thnx, questo è quello che ho letto ovunque, ma la chiave è che 'shoppingCart [itemName] = {};' Sto capendo gli oggetti sempre di più ogni giorno! – phpKid

1

Non funziona perché, nel tuo secondo esempio, si sta cercando di indicizzare un oggetto vuoto con una chiave che non è stata impostata. Quanto segue funzionerà ...

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

Perché ora shoppingCart [itemName] è in realtà un oggetto.

+0

thnx per la risposta rapida – phpKid

2

In oggetti javascript non crea automaticamente l'accesso membro; è necessario creare l'oggetto prima:

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

Nota È possibile, naturalmente, crea anche l'intero oggetto in una sola volta con

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

sì, okay thnx, sto vedendo come funzionano questi obj ora – phpKid

0

Cordiali saluti, soluzione alternativa:

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

o semplicemente

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