关联数组中的键名

Key name in associative array

我正在尝试将项目添加到关联数组,但我的键名没有正确生成。我的代码如下:

var room_name = $('#room_name').val();
var item_name = $('#item_name').val();
var item_description = $('#item_description').val();
roominventory[room_name] = { item_name : item_description };

我正在发生什么

{
    "Correct room name": {
        "item_name": "correct item description"
    }
}

item_name 外一切正常。我希望键名是 item_name 的值,但我只是得到文本 item_name.

知道我做错了什么吗?

您不能使用您正在使用的语法在对象键中使用变量,因为它们是按字面意思理解的。您需要像在 roominventory 的 setter 中一样使用括号表示法。试试这个:

var room_name = $('#room_name').val();
var item_name = $('#item_name').val();
var item_description = $('#item_description').val();

var obj = {};
obj[item_name] = item_description;
roominventory[room_name] = obj;

正如 Rory 所指出的,您不能在 key 中使用变量。你必须使用一个 object 来保存 key and value:

//wrong one
var roominventory = {};
var room_name = "something";
var item_name = "something item";
var item_description = "something description";
roominventory[room_name] = {item_name : item_description};
console.log(roominventory);

//correct way
var roominventory1 = {};
var room_name = "something";
var item_name = "something item";
var item_description = "something description";
var obj = {};
obj[item_name] = item_description;
roominventory1[room_name] = obj;
console.log(roominventory1);

https://jsfiddle.net/u2j42wsv/

作为替代方案,您可以使用

roominventory[room_name] = {[item_name] : item_description};

var room_name = $('#room_name').val();
var item_name = $('#item_name').val();
var item_description = $('#item_description').val();

roominventory = new Array();
roominventory[room_name] = {};
roominventory[room_name][item_name] = item_description;