Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.09.2019, 16:27
Новичок на форуме
Отправить личное сообщение для jsNubster Посмотреть профиль Найти все сообщения от jsNubster
 
Регистрация: 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 ну и так далее.
Ломаю голову.
Пожалуйста, помогите!
Ответить с цитированием
  #2 (permalink)  
Старый 18.09.2019, 17:09
Новичок на форуме
Отправить личное сообщение для jsNubster Посмотреть профиль Найти все сообщения от jsNubster
 
Регистрация: 18.09.2019
Сообщений: 8

Разобрался сам. Декартово произведение.
Ответить с цитированием
  #3 (permalink)  
Старый 18.09.2019, 17:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

jsNubster,
https://javascript.ru/forum/misc/674...tml#post444860
Ответить с цитированием
  #4 (permalink)  
Старый 18.09.2019, 17:33
Новичок на форуме
Отправить личное сообщение для jsNubster Посмотреть профиль Найти все сообщения от jsNubster
 
Регистрация: 18.09.2019
Сообщений: 8

Сообщение от рони Посмотреть сообщение
jsNubster,
https://javascript.ru/forum/misc/674...tml#post444860
Вот теперь следующий вопрос.
В моем случае эти массивы генерируются динамически, их может быть 1, а может быть 8, вопрос, как сделать вызов этой функции так, чтобы туда руками вбивать не пришлось?

Мои идеи:
Сгенерировать динамически нужное нам количество переменных, в зависимости от количества массивов, присвоить им значения этих массивов, т.е. каждую сделать отдельным массивов, но вот дальше тупик, как их в вызов этот запихнуть?

Не получится же сделать строковую переменную, динамически ее заполнить, где через запятую (вот так: [1,3,4], [6, 2], [7, 8, 9])все это будет перечислено, работать не будет?

Последний раз редактировалось jsNubster, 18.09.2019 в 17:39.
Ответить с цитированием
  #5 (permalink)  
Старый 18.09.2019, 17:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

jsNubster,
не понимаю проблемы.
Ответить с цитированием
  #6 (permalink)  
Старый 18.09.2019, 18:03
Новичок на форуме
Отправить личное сообщение для jsNubster Посмотреть профиль Найти все сообщения от jsNubster
 
Регистрация: 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(или сколько их там сгенерируется) вставить в вызов функции, чтобы оно работало?
Мне же нужны именно значения массивов в заданном порядке, а не сами массивы.
Ответить с цитированием
  #7 (permalink)  
Старый 18.09.2019, 18:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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>
Ответить с цитированием
  #8 (permalink)  
Старый 18.09.2019, 18:35
Новичок на форуме
Отправить личное сообщение для jsNubster Посмотреть профиль Найти все сообщения от jsNubster
 
Регистрация: 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>
Это было слишком просто, я думал, так нельзя.
Ответить с цитированием
  #9 (permalink)  
Старый 18.09.2019, 18:57
Новичок на форуме
Отправить личное сообщение для jsNubster Посмотреть профиль Найти все сообщения от jsNubster
 
Регистрация: 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>
Спасибо огромное!
Ответить с цитированием
  #10 (permalink)  
Старый 18.09.2019, 18:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Я как ответить на вопрос - есть ли жизнь на других планетах? TicTac Оффтопик 5 28.04.2011 04:29
Вопрос авторизации. 0931454574 Серверные языки и технологии 8 12.04.2011 11:09
Вопрос на миллион. Ajax и идентификация по адресной строке. 0931454574 AJAX и COMET 5 31.03.2011 11:54
Вопрос по замыканиям Goodfella Общие вопросы Javascript 20 09.03.2011 01:21