Вопрос по двумерному массиву 
		
		
		
		Добрый день. 
	Проблема следующая. Есть, условно, такой двумерный массив: 0: (2) [2, 4] 1: (3) [1, 3, 5] 2: (2) [2, 6] 3: (3) [1, 5, 7] Каким образом можно обойти его так, чтобы перебрать все возможные комбинации цифр в заданном порядке? Т.е. 2121, 2321, 2521, 2161, 2361 ну и так далее. Ломаю голову. Пожалуйста, помогите!  | 
	
		
 Разобрался сам. Декартово произведение. 
	 | 
	
		
  | 
	
		
 Цитата: 
	
 В моем случае эти массивы генерируются динамически, их может быть 1, а может быть 8, вопрос, как сделать вызов этой функции так, чтобы туда руками вбивать не пришлось? Мои идеи: Сгенерировать динамически нужное нам количество переменных, в зависимости от количества массивов, присвоить им значения этих массивов, т.е. каждую сделать отдельным массивов, но вот дальше тупик, как их в вызов этот запихнуть? Не получится же сделать строковую переменную, динамически ее заполнить, где через запятую (вот так: [1,3,4], [6, 2], [7, 8, 9])все это будет перечислено, работать не будет?  | 
	
		
 jsNubster, 
	не понимаю проблемы.  | 
	
		
 Цитата: 
	
 
let number = [
  [8],
  [2, 4],
  [1, 3, 5],
  [2, 6],
  [1, 5, 7],
  [2, 4, 6, 8],
  [3, 5, 9],
  [4, 8],
  [0, 5, 7, 9],
  [6, 8]
];
let finalNumber = [];
let result = prompt('Введите пин код', 1234);
let devResult = [];
for (let i = 0; i < result.length; i++) {
    devResult[i] = result[i];
}
for (let i = 0; i < devResult.length; i++) {
    let a = devResult[i];
    finalNumber[i] = [];
        for(g = 0; g < number[a].length; g++){
            finalNumber[i][g] = number[a][g];
        }
}
На выходе получается вроде такого: 0: (2) [6, 8] 1: (4) [0, 5, 7, 9] 2: (2) [4, 8] 3: (3) [3, 5, 9] Как все 4(или сколько их там сгенерируется) вставить в вызов функции, чтобы оно работало? Мне же нужны именно значения массивов в заданном порядке, а не сами массивы.  | 
	
		
 jsNubster, 
	:-? 
<script>
let number = [
  [8],
  [2, 4],
  [1, 3, 5],
  [2, 6],
  [1, 5, 7],
  [2, 4, 6, 8],
  [3, 5, 9],
  [4, 8],
  [0, 5, 7, 9],
  [6, 8]
];
let finalNumber = [];
let result = prompt('Введите пин код', 1234);
let devResult = [];
for (let i = 0; i < result.length; i++) {
    devResult[i] = result[i];
}
for (let i = 0; i < devResult.length; i++) {
    let a = devResult[i];
    finalNumber[i] = [];
        for(g = 0; g < number[a].length; g++){
            finalNumber[i][g] = number[a][g];
        }
}
function combinator(matrix){
  return matrix.reduceRight(function(combination, x){
    var result = [];
    x.forEach(function(a){
      combination.forEach(function(b){
        result.push( [ a ].concat( b ) );
      });
    });
    return result;
  });
};
document.write(
  combinator( finalNumber ).join("<br>")
);
  </script>
 | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 jsNubster, 
	на всякий случай ... 
<script>
let number = [
  [8],
  [2, 4],
  [1, 3, 5],
  [2, 6],
  [1, 5, 7],
  [2, 4, 6, 8],
  [3, 5, 9],
  [4, 8],
  [0, 5, 7, 9],
  [6, 8]
];
let result = prompt('Введите пин код', 1234);
let finalNumber = Array.from(result, i => [...number[i]]);
function combinator(matrix){
  return matrix.reduceRight(function(combination, x){
    var result = [];
    x.forEach(function(a){
      combination.forEach(function(b){
        result.push( [ a ].concat( b ) );
      });
    });
    return result;
  });
};
document.write(
  combinator( finalNumber ).join("<br>")
);
  </script>
 | 
	
		
 jsNubster, 
	не копируйте сообщения целиком, без необходимости, есть цитирование и ник.  | 
	
		
 Цитата: 
	
 Последний, касательно этой задачи, вопрос. От меня хотят, чтобы я сделал ввод-вывод через: 
var readline = require("readline");
            var rl = readline.createInterface(process.stdin, process.stdout);
            rl.on("line", function(line) {
              console.log("0,5,7,8,9")
              rl.close();
            }).on("close",function(){
              process.exit(0);
            });
Могли бы пояснить, как, либо где почитать внятно(потому что я уже читал, не понял), как это делается, я так понял, что это node.js, нативный js эту конструкцию не понимает. Вот финальный вариант моей программы: 
let number = [
  [0, 8],
  [1, 2, 4],
  [1, 2, 3, 5],
  [2, 3, 6],
  [1, 4, 5, 7],
  [2, 4, 5, 6, 8],
  [3, 5, 6, 9],
  [4, 7, 8],
  [0, 5, 7, 8, 9],
  [6, 8, 9]
];
let finalNumber = [];
let result = prompt('Введите пин код', 1234);
let devResult = [];
for (let i = 0; i < result.length; i++) {
    devResult[i] = result[i];
}
for (let i = 0; i < devResult.length; i++) {
    let a = devResult[i];
    finalNumber[i] = [];
        for(g = 0; g < number[a].length; g++){
            finalNumber[i][g] = number[a][g];
        }
}
function cartesianProduct(arr) {
    return arr.reduce(function(a,b){
        return a.map(function(x){
            return b.map(function(y){
                return x.concat(y);
            })
        }).reduce(function(a,b){ return a.concat(b) },[])
    }, [[]])
}
let a = cartesianProduct(finalNumber);
let b = [];
let finalString = '';
for (let i = 0; i < a.length; i++) {
    b[i] = a[i].join('');
}
for (i = 0; i < b.length; i++) {
    finalString += (b[i] + ',' + ' ');
}
finalString = finalString.slice(0, -2);
console.log(finalString);
 | 
	
		
 Цитата: 
	
  | 
	
		
 Вот ваш код, который теперь работает через консоль https://github.com/Malleys/readline-...aster/index.js 
	Цитата: 
	
 
  | 
| Часовой пояс GMT +3, время: 11:34. |