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())
    })
}