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(data, memo) {
    var options, name;
    
    if(data.length ) {
        options = data.shift();
        for(name in options){
            options = options[name];
        }
        memo = memo || [{}];
        return permutate(data, options.reduce(function(all, item){
            return all.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')}]));