UNPKG

@dxzmpk/js-algorithms-data-structures

Version:

Algorithms and data-structures implemented on JavaScript

32 lines (27 loc) 827 B
/** * @param {*[]} permutationOptions * @param {number} permutationLength * @return {*[]} */ export default function permutateWithRepetitions( permutationOptions, permutationLength = permutationOptions.length, ) { if (permutationLength === 1) { return permutationOptions.map((permutationOption) => [permutationOption]); } // Init permutations array. const permutations = []; // Get smaller permutations. const smallerPermutations = permutateWithRepetitions( permutationOptions, permutationLength - 1, ); // Go through all options and join it to the smaller permutations. permutationOptions.forEach((currentOption) => { smallerPermutations.forEach((smallerPermutation) => { permutations.push([currentOption].concat(smallerPermutation)); }); }); return permutations; }