Recursive permutations of arrays
by dhchow
HTML
Given n sets of choices: (1,2,3), (2,3,4), (4,5) You pick one element from each set of choices. Generate all possible picking.
(1,2,3)
(2,3,4)
(4,5)
JavaScript
function permutations(sets){
var result = [];
if(!arguments.length){
return [];
} else if (arguments.length == 1){
arguments[0].forEach(function(item, index, arr){
result.push([item])
})
return result;
} else {
var restOfSets = [];
// loop b/c arguments is not a true array
for( var i=1; i < arguments.length; i++) {
restOfSets.push(arguments[i]);
}
var permsTheRest = permutations.apply(this, restOfSets);
for (var f=0; f < arguments[0].length; f++){
for( var p=0; p < permsTheRest.length; p++) {
var perms = [arguments[0][f]].concat(permsTheRest[p])
result.push(perms);
}
}
return result;
}
/*return sets.reduce(function(prev, current, index, array){
return [prev, current];
})*/
}
//console.log("final (1):")
//console.dir( permutations([11,22,33]));
//console.log("final (2):")
//console.dir( permutations([11,22,33], [222,333,444]) );
var result = permutations([1,2,3],[2,3,4],[4,5]);
console.log("final:")
console.dir( result )
console.log(pp(result))
//console.log(pp(permutations()))
function pp(array) {
console.log("pretty print!")
array.forEach(function(choices, index, arr){
console.log(choices.toString())
})
}