Всевозможные варианты из n-размерного масива JS

Есть масив который может содержать n количество масивов(в этом масиве может содержаться n количество елементов) Пример

[[1,2,3,4],[5,6,7,8,9],[10,11,12,13,14,15]]

Вопрос: Как мне получить всевозможные значения из этого n-размерного масива:

Пример:

[1,5,10],[1,5,11]...[1,5,15],[1,6,10],[1,6,11]....[2,5,10]


Ответы (1 шт):

Автор решения: OPTIMUS PRIME

Завел дополнительый массив длины matrix.length[0, 0, 0] каждое число которого указывает на текущий индекс каждого массива внутри матрицы.
Для вашего примера, [0, 0, 0] → [1, 5, 10], [0, 0, 1] → [1, 5, 11] и т.д.
Остается справа налево, в цикле увеличивать «ячейки» этого массива на 1.

console.log = (e) => pre.append(JSON.stringify(e) + "\n");

let matrix = [
  [1, 2, 3, 4],
  [5, 6, 7, 8, 9],
  [10, 11, 12, 13, 14, 15]
];

let index_list = new Array(matrix.length).fill(0);

loop: while (true) {
  console.log( index_list.map((index, row) => matrix[row][index]) );

  let i = index_list.length - 1;
  while (++index_list[i] >= matrix[i].length) {
    // Число в index_list[i] вышло за пределы очередного массива?
    index_list[i] = 0; // Обнулить
    i--; // Пусть на следующей итерации ++Увеличивается разряд слева.
    
    if (i == -1) break loop; // Всё перебрал.
  }
}
<pre id="pre"></pre>

→ Ссылка