【问题标题】:multidimensional name selector [duplicate]多维名称选择器[重复]
【发布时间】:2016-10-08 18:13:47
【问题描述】:

所以我有一个像这样的 巨大 数组:

var enemy = {
    'level1' : {
        creature :
        {
            creature_name : {
                 'Goblin' : {
                    info: {
                        'c_name' : 'Goblin',
                        'HP' : '20',
                        'damage' : '3',
                        'loot' : [
                            {name: 'a wooden sword'   , item: 'weapon'  , value: 2}, 
                            {name: 'a golden necklace', item: 'amulet' , value: 1},
                            {name: 'a pair of boots'  , item: 'boots'  , value: 1},
                            {name: 'some cloth legs'  , item: 'legs'  , value: 3},
                            {name: 'a cloth helmet'  , item: 'helm'  , value: 2}
                        ]
                    }
                 },
                 'Cow' : {
                    info: {
                        'c_name' : 'Cow',
                        'HP' : '10',
                        'damage' : '1',
                        'loot' : [
                            {name: 'a wooden sword'   , item: 'weapon'  , value: 2}, 
                            {name: 'a golden necklace', item: 'amulet' , value: 1},
                            {name: 'a pair of boots'  , item: 'boots'  , value: 1},
                            {name: 'a cloth helmet'  , item: 'helm'  , value: 2}
                        ]
                    }
                 },
                 'dragon' : {
                    info: {
                        'c_name' : 'Cow',
                        'HP' : '300',
                        'damage' : '300',
                        'loot' : [
                            {name: 'an almighty dragon sword'   , item: 'weapon'  , value: 200}, 
                            {name: 'a dragon tooth', item: 'amulet' , value: 30},
                            {name: 'a pair of dragon boots'  , item: 'boots'  , value: 60},
                            {name: 'a dragon helmet'  , item: 'helm'  , value: 60}
                        ]
                    }
                 },

            }

        },
    },
    'level2' : {
        'skelleton' : {
            'HP' : '40',
            'damage' : '5',
            'loot' : [
                {name: 'a bone'   , item: 'weapon'  , value: 1},
                {name: 'a warriors helmet'   , item: 'helm'  , value: 4} 
            ]
        }
    }

};

当我选择 creature 时,我需要这样称呼它:

enemy.level1.creature.creature_name.dragon.info.c_name

现在我希望能够通过input box 或类似的东西来选择敌人。 但我不知道如何enemy.level1.creature.creature_name.dragon.info.c_name 中插入该值

我尝试使用enemy.level1.creature.creature_name.+ input_value + .info.c_name

但这似乎不起作用。必须是一个简单的解决方案吗?

【问题讨论】:

  • enemy.level1.creature.creature_name[input_value].info.c_name
  • 谢谢!试试看:)
  • enemy.level1.creature.creature_name[input_value].info.c_name
  • 那不是数组。
  • 它不工作,它说 Uncaught TypeError: Cannot read property 'info' of undefined。我想是因为它是生物名称.dragon.info.c_name 而不是生物名称[“dragon”].info.c_name。有什么帮助吗? @Pointy

标签: javascript jquery arrays input


【解决方案1】:

当有变量名作为散列元素时,要访问,而不是.dot 表示法,您可以使用[] 表示法。

所以

enemy.level1.creature.creature_name[input_value].info.c_name

应该得到你想要的。

【讨论】:

    【解决方案2】:

    你拥有的是一个对象而不是一个数组。您可以通过多种方式设置对象属性。一种方法是:

    var myObj = {
      foo: {
        value : "foo"
      },
      bar: {
        value: "bar"
      }
    }
    
    myObj["foo"] = "123";
    

    在你的情况下,你的反对更大,但过程是一样的:

    enemy.level1.creature.creature_name[input_value].info.c_name = "whatever name";
    

    其中输入值是生物名称的有效属性之一,即“龙”:

    enemy.level1.creature.creature_name["dragon"].info.c_name = "whatever name"
    

    【讨论】:

    • 它不工作,它说Uncaught TypeError: Cannot read property 'info' of undefined。我认为是因为它是生物名称。dragon.info.c_name 而不是生物名称[“dragon”].info.c_name。有什么帮助吗?
    • @GetOn 你必须去掉字符串中的空格;不带空格的属性名称dragon 与带空格的`dragon` 不同。
    • 修剪你的价值,如:var input_value = "dragon";然后enemy.level1.creature.creature_name[input_value.trim()].info.c_name = "whatever name";
    • 您还有什么需要帮助的......我认为这应该是公认的答案。
    猜你喜欢
    • 2013-02-05
    • 2015-01-29
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2014-09-30
    • 2017-03-24
    相关资源
    最近更新 更多