我有一个问题是将2个添加的变量转换为局部变量。 这是我的原始代码。
var mycars = new Array();
mycars[4]=(aa+","+bb+","+cc+","+dd+","+ee+","+ff+","+gg+","+hh);
mycars[5]=(ii+","+jj+","+kk+","+ll+","+mm+","+nn+","+oo+","+pp);
var car4 = mycars[4].toString();
var car5 = mycars[5].toString();
var new_data4 = car4.split(",");
var new_data5 = car5.split(",");
var final_data = "new_data";
for(var i = 4; i < 6 ; i++){
var c = final_data + i;
alert(c[i]);// the result is d,a(the local array n,e,w,_,d,a,t,a)
}
我希望这个结果是ee,nn
答案 0 :(得分:1)
c
不是数组;这是一个字符串。因此alert(c[i])
分别会回复字符串new_data4
和new_data5
的第五个和第六个字符。
如果您想使用c
作为变量名,和,如果这些变量是全局的,那么您可以访问window[c][i]
之类的元素。但是这个对局部变量不起作用。没有按名称访问本地变量的标准方法。
在将所有变量全局化之前,您根本不需要按名称访问变量。如果它们在数组中,您可以通过数字访问它们。
注意这一点。
var new_data = [];
new_data[4] = [aa, bb, cc, dd, ee, ff, gg, hh];
new_data[5] = [ii, jj, kk, ll, mm, nn, oo, pp];
for(var i = 4; i < 6 ; i++){
alert(new_data[i][i]);
}
顺便说一下,注意所有那些带有连接值的东西并将结果字符串化,然后再将它拆分......就消失了?没有必要 - 它基本上是繁忙的工作。您可以创建一个已填充值的数组,这样的数组应该是您的权威数据源。如果你需要一个字符串,那么从数组中构建它 - 而不是相反。
除了减少你编写的代码量之外,这还可以在名称中使用逗号而不会搞砸所有内容。 (目前,如果一个名称碰巧有一个逗号,你就会抛弃该名称及其后的所有内容。)
答案 1 :(得分:0)
var c = final_data + i;
尝试制作
var c = window[final_data + i];