Инициализация массива JavaScript на основе пользовательского ввода - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть апплет, который позволяет пользователю определять значения для 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 голосов
/ 03 ноября 2011

Мне удалось решить эту проблему с помощью рекурсивной функции, включающей циклы 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' в массиве строк, содержащих переменные, которые имеют более одного значения, поэтому я хочу зациклить те переменные.

Я уверен, что есть более простой способ сделать это, но пока это работает.

...