2013-05-29 252 views
0

我得到一个数组是这样的:动态JavaScript变量名称

var array = [ [ [1,1],[1,2],[1,3] ] , [ [2,2],[3,3],[4,4] ] ] ; 

我想单独在两个正常阵列的阵列,把内容在独立递增变量(数据1,数据2,数据3,数据4)。

但VAR数组的大小不同,在不同的时间(有时是3阵列,有时4,...)现在我的问题是如何创造的增加独立变量数据1,数据2,...

我想到了这

counter = 0; 
for (var content in array) 
{ 
    data + counter.toString() = content; 
    content++; 
} 

但是,这并不正常工作(通过我没想到它的方式:d)

我们能否找到一个解决办法一起?

问候, 苏珊!

+0

为什么要这么做for数组和for..in?你可以创建一个全局变量'window [“data”+ counter]' – C5H8NNaO4

+1

作为一个技术“JS允许这样的事情吗?”问题是合理的,但为了实际目的,你为什么要这么做?在代码审查中会指出,独立增量变量名称应该用数组替换,_especially_当您拥有像您说的那样的可变数量的值时 - 您为什么要以其他方式进行操作? – nnnnnn

回答

1
var array = [ [ [1,1],[1,2],[1,3] ] , [ [2,2],[3,3],[4,4] ] ] ; 

for (var i=1;i<=array.length;i++) 
    window["data" + i] = array[i-1].slice(); 

小提琴:http://jsfiddle.net/xC2kT/

我会建议你使用的JavaScript对象

+1

真棒!谢谢!! – Susanne92

0

尝试此代替:

counter = 0; 
for (var content in array) 
{ 
    window["data" + counter.toString()] = content; 
    counter++; 
} 
+3

我会建议你不要使用'for..in'作为数组..并且内容是'0,1'而不是数组元素,它是'counter ++'而不是'内容++'' –

+0

太棒了!谢谢!! – Susanne92

1

的唯一的方式来创建变量(即,本地执行上下文的性质)是他们在一个variable declaration,其不允许使用表达式var声明。

JavaScript的一个怪癖是全局变量是全局对象的属性,但这是唯一可以使用表达式创建实际变量的执行上下文,例如,

var globalObject = this; 
globalObject.foo = 'foo'; 
globalObject[foo + 'bar'] = 'foobar'; 
在全球范围内

是,在许多方面(但不完全),相当于:

var foo = 'foo'; 
var foobar = 'foobar'; 

但是,你不能在一个函数得到本地执行或可变对象的引用上下文,所以你不能以这种方式创建局部变量。

更好地创建“变量”作为对象的属性。

+0

非常感谢你! – Susanne92