Как сгенерировать все сочетания элементов из нескольких массивов?
Например доступно 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']]))