Всевозможные варианты из 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>