Присвоение значений объектам JSON в Javascript - PullRequest
6 голосов
/ 23 января 2012

Это то, что я пытаюсь построить с помощью JavaScript в точечной или [] записи:

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

Теперь, если 'item1' - это имя переменной itemName.

Thisработает:var shoppingCart = {};shoppingCart[itemName] = itemName;alert(shoppingCart.item1);

Что возвращает item1

Но это не работает:1 var shoppingCart = {};2 shoppingCart[itemName]['description'] = 'This is Item #1';

JS просто умирает на второй линии, почему?и как мне присвоить значение описания «description»?

Я бы сделал это так:

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

... но он делает ключ буквально itemName вместо item1.

Ответы [ 4 ]

11 голосов
/ 23 января 2012

shoppingCart[itemName] не существует.
Сначала необходимо создать его:

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

Или, еще лучше:

var shoppingCart = {};
shoppingCart[itemName] = { description: 'This is Item #1' };
2 голосов
/ 23 января 2012

В javascript объектах не создавать автоматически при доступе к элементу; сначала нужно создать объект:

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

Обратите внимание, что вы, конечно, можете также создать целый объект одновременно с помощью

shoppingCart[itemname] = { "description": description,
                           "price": price,
                           "quantity": quantity,
                           "shipping": shipping,
                           "total": total };
1 голос
/ 23 января 2012

Это не работает, потому что во втором примере вы пытаетесь проиндексировать пустой объект с ключом, который не был установлен.Следующее будет работать ...

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

Потому что теперь shoppingCart [itemName] фактически является объектом.

0 голосов
/ 27 февраля 2016

Просто к вашему сведению, альтернативное решение:

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

или просто

var shoppingCart = {};
shoppingCart.itemName = { description: 'This is Item #1' };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...