JSFiddle - React, Tailwind, and code Playground
by Yuriy Tarabanko
JavaScript
function copy(to, from) {
Object.keys(from).forEach(function(key){
to[key] = from[key];
});
return to;
}
function permutate(arrays, keys, memo) {
var options, name;
if(keys.length ) {
name = keys.shift();
options = arrays[name];
memo = memo || [{}];
return permutate(arrays, keys, options.reduce(function(accumulator, item){
return accumulator.concat(memo.map(function(curr){
var result = copy({}, curr);
result[name] = item;
return result;
}));
}, []));
}
return memo;
}
function chars(str) {
return str.split('');
}
console.log(permutate({abc: chars('abc'), '1234': chars('1234'), xyz: chars('xyz')}, ['abc', '1234', 'xyz']));