I’m having trouble figuring out how to generate a combination of values.
Given:
const items = ['a', 'b', 'c', 'd', 'e'];
should generate:
[ ['a', 'b', 'c'], ['a', 'b', 'd'], ['a', 'b', 'e'], ['a', 'c', 'd'], ['a', 'c', 'e'], ['a', 'd', 'e'], ['b', 'c', 'd'], ['b', 'c', 'e'], ['c', 'd', 'e'] ]
It generates a unique combination for all the items in the array.
Basically, the length of the array for each item is Math.round(items.length / 2)
.
Any help would be greatly appreciated.
Advertisement
Answer
You could take a straight forward approach and iterate the array and get the parts of the rest array by respecting the wanted length.
function perm(array, length) { return array.flatMap((v, i) => length > 1 ? perm(array.slice(i + 1), length - 1).map(w => [v, ...w]) : [[v]] ); } perm(['a', 'b', 'c', 'd', 'e'], 3).forEach(a => console.log(...a));
.as-console-wrapper { max-height: 100% !important; top: 0; }