Non-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 arr = [];
var result = [];
if (!arguments.length) return [];
for (var i in arguments) {
arr.push(arguments[i]);
}
if (arguments.length == 1) {
arr[0].forEach(function(n){
result.push([n]);
})
return result;
}
for( var f=0; f < arr[0].length; f++) {
var rset = [];
rset.push(arr[0][f]);
// between sets
for( var s=1, j=0; s < arr.length; s++) {
rset.push(arr[s][j]);
j++;
}
result.push(rset);
}
return result;
}
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())
})
}