如何使用javascript使用数组的内容创建变量名称

时间:2012-04-27 06:39:19

标签: javascript jquery

我创建了一个数组,

var myBuildingName=['A1','A2','A3','A4'];

其中A1,A2,A3和A4是通过用户输入获得的名称。 我现在想要创建名称为A1,A2,A3和A4的数组。

我尝试过使用

for(var i=0;i<myBuildingName.length;i++)
{
   var myBuildingName[i]=[];
}

但它不起作用......

请帮忙。

5 个答案:

答案 0 :(得分:1)

您创建一个主父对象,并使用数组值作为对象的键,您可以在其中为每个对象存储数组。

var myBuildingName=['A1','A2','A3','A4'];

var master = {};

for (var i = 0; i < myBuildingName.length; i++) {
   master[myBuildingName[i]] = [];
}

然后,您可以访问以下数据:

var a1Array = master['A1'];

var firstA1Item = master['A1'][0];

答案 1 :(得分:0)

如果你真的想用这些名字创建变量(我不推荐),你必须eval()。所以:

for(var i=0;i<myBuildingName.length;i++)
{
   eval("var " + myBuildingName[i] + " = [] "); // This creates Array variables called A1, A2 etc.
}

同样,不建议使用上述方法。您应该将名称指定为对象文字的键,例如:

var myStuff = {};
for(var i=0;i<myBuildingName.length;i++)
{
   var myStuff[myBuildingName[i]] = [];
}

答案 2 :(得分:0)

您无法访问本地变量对象(全局代码除外),因此您无法通过变量声明添加属性。对于全局上下文中的全局代码,您可以这样做:

var global  = this;
for ( ...) {
  global[myBuildingName[i]] = []
}

但是你不能在函数上下文中对函数代码这样做。请参阅jfriend00的回答。

答案 3 :(得分:0)

Here's a demo

var myBuildingName = ['A1', 'A2', 'A3', 'A4'];

function arrayFromNames(arr) {
    var store = {};                         //storage for the arrays
    for (var i = 0; i < arr.length; i++) {  //for each in the passed names
        store[arr[i]] = [];                 //add to the storage an array with the corresponding name
    }
    return store;                           //return the storage
}

var nameArrays = arrayFromNames(myBuildingName);  //build using your array

console.log(nameArrays);​

//you now have:
//nameArrays.A1, nameArrays.A2,...
//or
//nameArrays['A1'], nameArrays['A2'],...

答案 4 :(得分:0)

你已经收到很多很棒的答案,如果其中一个满足你的需求,你应该接受这个答案。这仍然是开放的这一事实使我们认为没有人以你希望的方式回答你的问题。

如果是这种情况,我只能假设您想在全局范围内使用这些变量。

var myBuildingName=['A1','A2','A3','A4'];

for (var i = 0; i < myBuildingName.length; i++) {
   window[myBuildingName[i]] = [];
}

现在您可以“正常”访问变量。

A1.push('test');

注意:这是一种可怕的做法,因为你永远不应该污染全球空间。