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

Convert string literals in an array to variable name

本文关键字:转换 变量名 文字 字符串 数组      更新时间:2023-09-26

我是javascript新手。我试图将对象变量名存储在数组中但我这样做的方式是,数组值变成字符串。是否有一种方法可以将这些值从字符串更改为对象变量名称?在下面的代码中,最后一个语句是我想使用的,但它生成"未定义",因为,我认为,它被视为一个字符串。谢谢!

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);

免责声明:这是一种非常糟糕的样式,尽量避免使用。看看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));
}

您不能像您试图做的那样构建名称并让它存储具有相同名称的对象。在myArray中有字符串"plan1""plan2"。你必须做一些像myArray[0] = plan1; myArray[1] = plan2;这样的事情,然后它应该在数组中工作,就像你想要的那样。

不要尝试通过编程来实现。只要用你想要包含的部分来构建你的数组字面量:

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    
}];

可以使用

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

工作副本http://plnkr.co/edit/7pY4Lcmx6wN1rQk9rklu?p=preview