Инициализация массива JavaScript на основе пользовательского ввода

#javascript #multidimensional-array #initialization

#javascript #многомерный массив #инициализация

Вопрос:

У меня есть апплет, который позволяет пользователю определять значения для 10 переменных, все из которых могут быть массивами. Затем я хочу, чтобы программа перебирала все возможные комбинации, а затем сохраняла вычисления в переменной.

Ранее я жестко запрограммировал его для инициализации результирующего массива SIGMA путем перебора каждой переменной, независимо от того, является ли она вектором или отдельным значением, т. Е.:

 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 только для тех переменных, которые представляют собой массив, а не единственное значение. Поэтому, если все переменные представляют собой одно число, за исключением двух, скажем, X и Y, тогда я бы хотел иметь:

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

Однако я не совсем уверен, как лучше всего это сделать, поскольку количество циклов for будет зависеть от количества переменных, являющихся массивами. Я думаю, мне нужно либо использовать рекурсивную функцию, либо каким-то образом включить цикл while.

У кого-нибудь есть хорошие идеи о том, как это можно сделать? Спасибо!

Ответ №1:

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

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

Комментарии:

1. Так оно и есть… так оно и есть. Мой опыт работы с JavaScript очень ограничен, поэтому я просто счастлив, когда что-то действительно работает. Есть ли гораздо более простой способ добиться этого?