0

我创建了一个数组,

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

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

请帮忙。

4

5 回答 5

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];
于 2012-04-27T06:43:09.103 回答
0

你收到了很多很棒的答案,如果其中一个满足你的需要,你应该接受那个答案。这仍然是开放的这一事实使我们认为没有人像您希望的那样完全回答您的问题。

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

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

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

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

A1.push('test');

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

于 2012-04-27T08:03:35.107 回答
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]] = [];
}
于 2012-04-27T06:46:01.670 回答
0

您无法访问局部变量对象(全局代码除外),因此除了通过变量声明之外,您无法添加属性。对于全局上下文中的全局代码,您可以执行以下操作:

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

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

于 2012-04-27T06:46:59.923 回答
0

这是一个演示

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'],...
于 2012-04-27T06:47:31.673 回答