dist-javascript-algorithms-and-data-structures
Version:
Algorithms and data-structures implemented on JavaScript
29 lines (24 loc) • 755 B
JavaScript
/**
* @param {*[]} comboOptions
* @param {number} comboLength
* @return {*[]}
*/
export default function combineWithoutRepetitions(comboOptions, comboLength) {
if (comboLength === 1) {
return comboOptions.map(comboOption => [comboOption]);
}
// Init combinations array.
const combos = [];
// Eliminate characters one by one and concatenate them to
// combinations of smaller lengths.
comboOptions.forEach((currentOption, optionIndex) => {
const smallerCombos = combineWithoutRepetitions(
comboOptions.slice(optionIndex + 1),
comboLength - 1,
);
smallerCombos.forEach((smallerCombo) => {
combos.push([currentOption].concat(smallerCombo));
});
});
return combos;
}