18.09.2019, 16:27
|
Новичок на форуме
|
|
Регистрация: 18.09.2019
Сообщений: 8
|
|
Вопрос по двумерному массиву
Добрый день.
Проблема следующая.
Есть, условно, такой двумерный массив:
0: (2) [2, 4]
1: (3) [1, 3, 5]
2: (2) [2, 6]
3: (3) [1, 5, 7]
Каким образом можно обойти его так, чтобы перебрать все возможные комбинации цифр в заданном порядке?
Т.е. 2121, 2321, 2521, 2161, 2361 ну и так далее.
Ломаю голову.
Пожалуйста, помогите!
|
|
18.09.2019, 17:09
|
Новичок на форуме
|
|
Регистрация: 18.09.2019
Сообщений: 8
|
|
Разобрался сам. Декартово произведение.
|
|
18.09.2019, 17:14
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
|
|
18.09.2019, 17:33
|
Новичок на форуме
|
|
Регистрация: 18.09.2019
Сообщений: 8
|
|
Вот теперь следующий вопрос.
В моем случае эти массивы генерируются динамически, их может быть 1, а может быть 8, вопрос, как сделать вызов этой функции так, чтобы туда руками вбивать не пришлось?
Мои идеи:
Сгенерировать динамически нужное нам количество переменных, в зависимости от количества массивов, присвоить им значения этих массивов, т.е. каждую сделать отдельным массивов, но вот дальше тупик, как их в вызов этот запихнуть?
Не получится же сделать строковую переменную, динамически ее заполнить, где через запятую (вот так: [1,3,4], [6, 2], [7, 8, 9])все это будет перечислено, работать не будет?
Последний раз редактировалось jsNubster, 18.09.2019 в 17:39.
|
|
18.09.2019, 17:47
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
jsNubster,
не понимаю проблемы.
|
|
18.09.2019, 18:03
|
Новичок на форуме
|
|
Регистрация: 18.09.2019
Сообщений: 8
|
|
Сообщение от рони
|
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(или сколько их там сгенерируется) вставить в вызов функции, чтобы оно работало?
Мне же нужны именно значения массивов в заданном порядке, а не сами массивы.
|
|
18.09.2019, 18:19
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
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>
|
|
18.09.2019, 18:35
|
Новичок на форуме
|
|
Регистрация: 18.09.2019
Сообщений: 8
|
|
Сообщение от рони
|
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>
|
Это было слишком просто, я думал, так нельзя.
|
|
18.09.2019, 18:57
|
Новичок на форуме
|
|
Регистрация: 18.09.2019
Сообщений: 8
|
|
Сообщение от рони
|
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>
|
Спасибо огромное!
|
|
18.09.2019, 18:58
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,134
|
|
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>
|
|
|
|