我有3个数组如下:
我动态创建的
var count =3;
for (var j = 0; j < count; j++) {
eval('var array' + j + '=[]');
}
array0[] , array1[], array2[]
还有另一个阵列:
var arraycomp = [1,2,3];
我有另一个阵列:
var valarray = [1,2,3,2,1,3,1,2,3,2,3,4,5,6,7]
我的工作如下:
for(var k=0;k<arraycomp.length;k++){
for(var i=0;i<valarray.length;i++){
if(valarray[i]==arraycomp[k]){
var arrayname = "array"+k;
arrayname.push(valarray[i]);
}
}
}
我需要的是:
array0[] having 1's
array2[] having 2's
array3[] having 3's
但它不起作用:
我收到错误:
var arrayname = "array"+k;
arrayname.push(valarray[i]);
错误是:
无法推送到arrayname
我尝试了另一种选择:
var arrayname = "array"+k;
var len = arrayname .length;
arrayname [len ] = valarray[i];
如何将其视为数组:var arrayname = "array"+k;
它将变量视为变量。
答案 0 :(得分:2)
在这里,您尝试将值推送到字符串。
var arrayname = "array"+k;
arrayname.push(valarray[i]);
因为这两个在JS中是等价的:
var x = 1;
this.x = 1;
这两个也是等价的:
obj[prop]
obj.prop
您可以使用动态生成的字符串名称以这种方式访问变量:
var arrayname = "array"+k;
this[arrayname].push(valarray[i]);
您可能还想以相同的方式声明它:
var count =3;
for (var j = 0; j < count; j++) {
//eval('var array' + j + '=[]');
this['array' + j] = [];
}
但是,通常情况下,eval
和this[]
的所有这些操作都是错误的。你可以定义一个数组数组,一个带数组的对象或其他任何东西 - 任何东西都比以这种方式创建变量更好。
答案 1 :(得分:1)
而不是:
var arrayname = "array"+k;
arrayname.push(valarray[i]);
使用:
var arrayname = "array"+k;
var window[arrayname].push(valarray[i]);
那是因为arrayname
是一个字符串(“array0”,“array1”等)。
只有在全局范围内调用arrayname
(即不是来自函数)时,才能访问窗口对象上的eval
。
将eval('var array' + j + '=[]');
替换为eval('window.array' + j + '=[]');
作为解决方法。
或者更好的是,如果动态代码真的你需要的东西,可以使用escodegen,estemplate或其他一些基于AST的工具进行元编程。
答案 2 :(得分:1)
以下代码不起作用。
if(valarray[i]==arraycomp[k]){
var arrayname = "array"+k;
arrayname.push(valarray[i]);
}
(“array”+ k)仍然是像“array0”或“array1”这样的字符串。它不是一个数组,所以不可能将它用作数组。您可以尝试使用eval()来获取数组实例,但是@Rory指出您不应该使用eval()。它是Javascript的罪恶之一,并且具有非常具体的用例,创建Arrays不是其中之一。
您可以尝试为您的程序创建一个二维数组,如下所示
var count =3;
var my2dArr = [];
var arraycomp = [1,2,3];
var valarray = [1,2,3,2,1,3,1,2,3,2,3,4,5,6,7]
for (var j = 0; j < count; j++) {
my2dArr.push([]);
}
for(var k=0;k<arraycomp.length;k++){
for(var i=0;i<valarray.length;i++){
if(valarray[i]==arraycomp[k]){
my2dArr[k].push(valarray[i]);
}
}
}
在Javascript中,2d数组只是一个数组数组,因此所有子数组都可以有任意长度。