JSFiddle - React, Tailwind, and code Playground

JavaScript

function p(o){
    var count=1;
    var step_len=[];
    for(var i=0;i<o.length;i++){
        step_len[i]=count;
        count*=o[i].length;
    }
    for(var i=0;i<count;i++){
        var tmp=[];
        for(var n=0;n<o.length;n++){
            tmp.push(o[n][Math.floor(i/step_len[n])%o[n].length]);
        }
        console.log(tmp);
    }
}

var o=[
    [1,2],
    ['a','b'],
    ['foo','bar']
];

p(o);