繁体   English   中英

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

[英]Initializing JavaScript array based on user input

我有一个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循环。

任何人都对如何做到这一点有什么好主意? 谢谢!

我能够通过创建一个包含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”包含具有多个值的变量,因此,这些变量是我要遍历的。

我敢肯定,有一种更简单的方法可以做到这一点,但是目前可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM