将数组中的字符串文字转换为变量名称

时间:2014-06-30 22:20:35

标签: javascript arrays string object literals

我是javascript的新手。我试图将对象变量名存储在数组中,但我正在这样做,数组值成为字符串。有没有办法将这些值从字符串更改为对象变量名称?在下面的代码中,最后一个语句是我想要使用的,但它会生成“undefined”,因为我认为它被视为一个字符串。谢谢!

var plan1 = {
  name: "Lisa",
  price: 5.00,
  space: 100
}

var plan2 = {
  name: "John",
  price: 2.00,
  space: 150    

}

var myArray = [];

for (var i = 0; i < 2; i++) {
  myArray[i] = "plan" + (i + 1);
}

alert(plan2.name);
alert(myArray[1].name);

4 个答案:

答案 0 :(得分:1)

您不能像尝试那样构建名称,并使其存储具有相同名称的对象。 myArray中的内容是字符串"plan1""plan2"。  您必须执行myArray[0] = plan1; myArray[1] = plan2;之类的操作然后它应该像您希望的那样在数组中工作。

答案 1 :(得分:1)

免责声明:这是一种非常糟糕的风格,尽量避免它。看http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html

您可以考虑使用eval

for (var i = 0; i < 2; i++) {
  myArray[i] = eval("plan" + (i + 1));
}

答案 2 :(得分:0)

请勿尝试以编程方式执行此操作。只需从您希望包含的部分构建数组文字:

var plan1 = {
  name: "Lisa",
  price: 5.00,
  space: 100
};
var plan2 = {
  name: "John",
  price: 2.00,
  space: 150 
};
var myArray = [plan1, plan2];

甚至根本不将这些变量用于对象,并直接将它们放在数组结构中:

var myArray = [{
  name: "Lisa",
  price: 5.00,
  space: 100
}, {
  name: "John",
  price: 2.00,
  space: 150    
}];

答案 3 :(得分:0)

你可以使用

myArray[i] = window["plan" + (i + 1)];

http://plnkr.co/edit/7pY4Lcmx6wN1rQk9rklu?p=preview

的工作副本