基于用户输入初始化JavaScript数组

Initializing JavaScript array based on user input

本文关键字:输入 初始化 JavaScript 数组 用户 于用户      更新时间:2023-09-26

我有一个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'在包含有多个值的变量的字符串数组中,因此,我要循环的就是这些变量。

我相信有一个更简单的方法,但现在这个工作。