【问题标题】:Key name in associative array关联数组中的键名
【发布时间】:2016-10-07 10:13:49
【问题描述】:

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

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

任何想法我做错了什么?

【问题讨论】:

    标签: javascript jquery associative-array


    【解决方案1】:

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

    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;
    

    【讨论】:

    • 感谢罗里的工作。我不知道他们是按字面意思理解的。我现在可以看到您的解决方案如何克服这个问题。再次感谢克林特
    【解决方案2】:

    作为替代,您可以使用

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

    【讨论】:

    • 我不知道这是可能的(我首先必须检查它才能相信我)。我经常使用其他答案显示的那种解决方案,直到现在我认为这是唯一的方法,但我更喜欢你的,更简单和可读。谢谢!
    【解决方案3】:

    正如 Rory 指出的那样,您不能在键中使用变量。你必须使用一个包含key and valueobject

    //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/

    【讨论】:

    • 如果我已经指出了,为什么还要添加另一个相同的答案?
    • @RoryMcCrossan:那段时间我正在做小提琴……没有冒犯您的回答……如果需要,将删除。
    【解决方案4】:

    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;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 2013-04-17
      • 1970-01-01
      相关资源
      最近更新 更多