JSFiddle - React, Tailwind, and code Playground
HTML
<textarea id="out"></textarea>
CSS
html,body,textarea{width:100%;height:100%;border:0;}
JavaScript
function lazyProduct(sets, holla) {
var setLength = sets.length;
function helper(array_current, set_index) {
if (++set_index >= setLength) {
holla.apply(null, array_current);
} else {
var array_next = sets[set_index];
for (var i=0; i<array_next.length; i++) {
helper(array_current.concat(array_next[i]), set_index);
}
}
}
helper([], -1);
}
var jsfiddle_output = document.getElementById('out'), jsfiddle_out;
var sets = [ [2,3,4,5], ['sweet','ugly'], ['cats','dogs','hogs'] ];
function holla( n, adj, noun ){
jsfiddle_output.value += (jsfiddle_out = [n,adj,noun].join(' ')) + '\n';
console.log( jsfiddle_out );
}
lazyProduct(sets,holla);
//JSFiddle demo: