Как сгенерировать все сочетания элементов из нескольких массивов?

Например доступно 2 массива. Может быть хоть 20 массивов.

  let arr1 = ['1','2']; 
  let arr2 = ['a','b']; 

  let allArr = [arr1,arr2];

Нужно сгенерировать все доступные сочетания массивов в объект. Без повторений.

То есть на выходе будет:

[{
    'arr1': '1',
    'arr2': 'a',
},{
    'arr1': '2',
    'arr2': 'a',
},
{
    'arr1': '1',
    'arr2': 'b',
},{
    'arr1': '2',
    'arr2': 'b',
}]

То есть тут число вложенных циклов будет динамическим. Какой алгоритм лучше всего использовать?


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

Автор решения: Денис Степанов

Попробуйте рекурсивно.

function combine(arrs) {
  const answer = [];

  (function req(result, rest = arrs.length) {
    if (!rest) return answer.push(result);

    arrs[rest - 1].forEach((element) => req([...result, element], rest - 1));
  })([]);

  return answer.map((arr) => arr.reverse().map((current, index) => ({[`arr${index + 1}`]: current})));
}

console.log(combine([['1','2'], ['a', 'b']]))

→ Ссылка