Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужен цикл для создания огромного массива (https://javascript.ru/forum/misc/31761-nuzhen-cikl-dlya-sozdaniya-ogromnogo-massiva.html)

apish 19.09.2012 22:57

Нужен цикл для создания огромного массива
 
Есть исходный массив asd[[0],[1],[2],[3],[4]];
Каждый элемент, кроме нулевого представляет из себя массив только из нулевого элемента.

:help: :help: :help: :help: :help: :( :(

Необходимо чтобы при каждом переборе массива к каждому элементу, отличному от нуля, Добавлялись по 4 таких же массива, состоящему только из нулевого элемента.

На словах сложно :( , объясню на примерах ;) :

Как исходник имеем массив
asd[
  [0],
  [1],
  [2],
  [3],
  [4]
];


После первого прохода цикла, получаем следующий массив:

asd[
  [0],
  [1, 
    [0],
    [1],
    [2],
    [3],
    [4]
    ],
  [2, 
    [0],
    [1],
    [2],
    [3],
    [4]
    ],
  [3, 
    [0],
    [1],
    [2],
    [3],
    [4]
    ],
  [4, 
    [0],
    [1],
    [2],
    [3],
    [4]
    ],
];


Следующий цикл преобразует этот массив в это:

asd[
  [0],
  [1, 
    [0,
      [0],
      [1],
      [2],
      [3],
      [4]
    ],
    [1,
      [0],
      [1],
      [2],
      [3],
      [4]
    ],
    [2,
      [0],
      [1],
      [2],
      [3],
      [4]
    ],
    [3,
      [0],
      [1],
      [2],
      [3],
      [4]
    ],
    [4,
      [0],
      [1],
      [2],
      [3],
      [4]
    ]
    ],
  [2, 
    [0,
      [0],
      [1],
      [2],
      [3],
      [4]
    ],
    [1,
      [0],
      [1],
      [2],
      [3],
      [4]
    ],
    [2,
      [0],
      [1],
      [2],
      [3],
      [4]
    ],
    [3,
      [0],
      [1],
      [2],
      [3],
      [4]
    ],
    [4,
      [0],
      [1],
      [2],
      [3],
      [4]
    ]
    ], и т.д.


При этом в процессе выполнения цикла, необходимо задавать элементам значения.

asd[1][2][2][1][2][3][4][1][2] = 4;
asd[1][2][2][1][2][3][4][1][3] = 0;

И т.д.

С принципами работы циклов я знаком, но не пойму как при создании этого здоровенного многоуровневого массива присваивать значения его элементам.

При выполнении определенного условия, выполнение цикла будет прекращено, но сколько раз цикл будет совершен - неизвестно.

Может, кто-то знает как решить сию задачу? Или, может, есть какие-то другие способы ее решения кроме циклов?

devote 20.09.2012 02:37

Цитата:

Сообщение от Дзен-трансгуманист
и погружать браузер на несколько минут в ступор, пока выполняется адовая процедура?

для этого и придумали WebWorkers

apish 20.09.2012 16:10

Благодарю за участие. Придумал другой ход: может кому пригодится, выкладываю

moves - исходный массив.

function perebor(item, i, moves) {
                      if(typeof(item) == 'object'){
                        item.forEach(perebor); //если рассматриваемый элемент - массив, заново кидаем его в функцию на ращипление
                      }else{
                        if(item!==0 && i!==0){ //если элемент не нулевой и это значение не равно нулю
                          moves.splice(i, 1, [item, ["value0", 88, 89]]); //Заменяем элемент массивом типа [элемент, [доп. массив]]
                        }
                        
                      }
                      
                    }
                    
                    moves.forEach(perebor);


alert(moves);

Всё, функция создает бездонный массив, как и требовалось. Кроме того, она параллельно строит все ветки массива, а не по очереди - это в моем случае тоже важно, но забыл сказать об этом


Часовой пояс GMT +3, время: 09:49.