Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Assigning Values to JSON Objects in Javascript

This is what I'm trying to build via JavaScript in dot or [ ] notation:

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

Now if 'item1' is the variable name itemName.

This works:
var shoppingCart = {};
shoppingCart[itemName] = itemName;
alert(shoppingCart.item1);

Which returns item1

But this doesn't work:
1 var shoppingCart = {};
2 shoppingCart[itemName]['description'] = 'This is Item #1';

JS just dies at line 2, why? and how do I assign the description value to 'description'?

I would do it like this:

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

...but it makes the key literally itemName instead of item1.

like image 722
phpKid Avatar asked Jan 22 '12 22:01

phpKid


3 Answers

shoppingCart[itemName] doesn't exist.
You need to create it first:

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

Or, better yet:

var shoppingCart = {};
shoppingCart[itemName] = { description: 'This is Item #1' };
like image 70
SLaks Avatar answered Nov 07 '22 13:11

SLaks


In javascript objects do not auto-create on member access; you have to create the object first:

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

Note you can of course also create the whole object at once with

shoppingCart[itemname] = { "description": description,
                           "price": price,
                           "quantity": quantity,
                           "shipping": shipping,
                           "total": total };
like image 21
6502 Avatar answered Nov 07 '22 14:11

6502


It doesn't work because, in your second example, you're trying to index a blank object with a key that hasn't been set. The following will work...

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

Because now shoppingCart[itemName] is actually an object.

like image 25
Ryan McGrath Avatar answered Nov 07 '22 15:11

Ryan McGrath



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!