Вопрос заключается в том, как переписать функцию dumbGenerate, чтобы размер массива modifiers мог быть произвольным.
const modifiers = [
['A', 'B', 'C'],
[1, 2, 3],
['!', '.']
];
function dumbGenerate(modifiers) {
const result = [];
modifiers[0].forEach(letter => {
modifiers[1].forEach(digit => {
modifiers[2].forEach(punctuation => {
result.push([letter, digit, punctuation])
})
})
})
return result;
}
Результат выполнения:
[ [ 'A', 1, '!' ],
[ 'A', 1, '.' ],
[ 'A', 2, '!' ],
[ 'A', 2, '.' ],
[ 'A', 3, '!' ],
[ 'A', 3, '.' ],
[ 'B', 1, '!' ],
[ 'B', 1, '.' ],
[ 'B', 2, '!' ],
[ 'B', 2, '.' ],
[ 'B', 3, '!' ],
[ 'B', 3, '.' ],
[ 'C', 1, '!' ],
[ 'C', 1, '.' ],
[ 'C', 2, '!' ],
[ 'C', 2, '.' ],
[ 'C', 3, '!' ],
[ 'C', 3, '.' ] ]
Как я понимаю, здесь есть 2 варинта решния, генерировать n вложенных циклов или использовать рекурсию. Как генерировать вложенные циклы я вообще не представляю, а с рекурсией я застрял на этом:
function recursiveGenerate(modifiers, startFrom = 0) {
const lastIndex = modifiers.length - 1;
if(startFrom > lastIndex) {
return;
}; // ????
for(let value of modifiers[startFrom]) {
console.log('current value', value)
recursiveGenerate(modifiers, startFrom + 1);
}
}
У меня уже получилось выводить в консоль в нужном порядке значения, но я не понимаю как их собрать в массив массивов, как в первом примере.
current value A
current value 1
current value !
current value .
current value 2
current value !
current value .
current value 3
current value !
current value .
current value B
current value 1
current value !
current value .
current value 2
current value !
current value .
current value 3
current value !
current value .
current value C
current value 1
current value !
current value .
current value 2
current value !
current value .
current value 3
current value !
current value .
Заранее спасибо за внимание)