【问题标题】:How to operate on object based on string如何基于字符串对对象进行操作
【发布时间】:2013-04-08 21:01:32
【问题描述】:

JS 菜鸟在这里。如果我有一个字符串,如何从与字符串同名的对象中调用属性?

var carrot = {
    'vitaminA': 150,
    'vitaminC': 100
};

var cucumber = {
    'vitaminA': 10,
    'vitaminC': 12

};

var vegetable = 'cucumber'
alert(vegetable.vitaminC) // this doesn't work 

注意:这是我正在处理的问题的简化版本,所以我不能简单地说 alert(cucumber.vitaminC) -- 我必须根据字符串对对象进行操作

【问题讨论】:

标签: javascript string object


【解决方案1】:

你可以这样:

window[vegetable].vitaminC

但我强烈建议将这些家伙包含在一个不是全局对象 window 的对象中:

var vegetables = {
  cucumber : {
    vitaminA: 10,
    vitaminC: 12
  },
  carrot : {
    vitaminA: 150,
    vitaminC: 100
  }
};

var vegetable = 'cucumber';
alert(vegetables[vegetable].vitaminC);

【讨论】:

  • +1:击败我。虽然我个人喜欢一些分号:)
  • 谢谢,为什么不建议在全局对象窗口中包含它?
  • @BenDavidow 因为window 是全局对象,一个好的做法是用很多东西“污染”全局空间。原因有很多。
【解决方案2】:

如果你知道范围,你可以这样做。如果作用域是全局的,你可以这样访问它:

var vegetable = window['cucumber'];
alert(vegetable.vitaminC);

【讨论】:

    【解决方案3】:

    我会稍微改变你的结构,让你的对象脱离全局范围。您可以通过简单地添加一个新对象来包含您的蔬菜来做到这一点:

    var vegetables = {
        carrot: {
            'vitaminA': 150,
            'vitaminC': 100
        },
        cucumber: {
            'vitaminA': 10,
            'vitaminC': 12
        }
    };
    

    然后您就可以使用[] 表示法按名称(带有字符串)访问您的属性:

    vegetables['cucumber'].vitaminC; // 12
    

    或者

    vegetables['cucumber']['vitaminC']; // 12
    

    【讨论】:

    • 他们不需要改变结构来访问属性。虽然我同意他们应该改变结构:)
    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多