根据用户输入初始化JavaScript数组

时间:2011-11-02 21:11:10

标签: javascript multidimensional-array initialization

我有一个applet,允许用户定义10个变量的值,所有这些变量都可以是数组。然后,我希望程序迭代所有可能的组合,然后将计算保存到变量。

之前我通过循环遍历每个变量来硬编码初始化结果数组SIGMA,无论它是向量还是单个值,IE:

SIGMA = new Array(A.length);
for (i1=0; i1<A.length; i1++) {
  SIGMA[i1] = new Array(B.length);
  for (i2=0; i2<B.length; i2++) {
    SIGMA[i1][i2] = new Array(C.length);
    for (i3=0; i3<C.length; i3++) {
      ...
    }
  }
}

这导致了一个10维的SIGMA数组,如果一些或多个变量是数组,这使得处理速度非常慢。

我想做的是让它仅为那些数组而不是奇异值的变量初始化SIGMA。因此,如果所有变量都是一个数字,除了两个,比如X和Y,那么我想要:

SIGMA = new Array(X.length);
for (i1=0; i1<X.length; i1++) {
  SIGMA[i1] = new Array(Y.length);
}

但是,我不太确定最好的方法是这样做,因为for循环的数量取决于数组变量的数量。我想我要么需要使用递归函数,要么以某种方式结合while循环。

有人对如何做到这一点有任何好的想法?谢谢!

1 个答案:

答案 0 :(得分:0)

我能够通过创建一个包含for循环的递归函数来解决这个问题:

sigma = new Array(eval(var_idx[0]).length);
sigma_forloop('sigma', 0)

function sigma_forloop(X, idx) {
    for (var i=0; i<eval(var_idx[idx]).length; i++) {
        eval(X + '[' + i + ']' + ' = new Array(eval(var_idx[idx+1]).length);')
        if (idx+2 < var_idx.length) {
            var Y = X + '[' + i + ']';
            sigma_forloop(Y, idx+1);
        }
    }
}

包含具有多个值的变量的字符串数组中的变量'var_idx',因此,它是我想要循环的那些变量。

我确信有一种更简单的方法可以做到这一点,但现在可以使用。