JSFiddle - React, Tailwind, and code Playground

by Steven Senkus

JavaScript

function cartesian(...args) {
    var r = [],
        max = args.length - 1;

    function helper(arr, i) {
        for (var j = 0, l = args[i].length; j < l; j++) {
            var a = arr.slice(0); // clone arr
            a.push(args[i][j]);
            if (i == max)
                r.push(a);
            else
                helper(a, i + 1);
        }
    }
    helper([], 0);
    return r;
}

const allPerms = cartesian(['short', 'medium', 'long'], ['arms', 'chest', 'legs'], ['easy', 'difficult']);

let result = allPerms.map(p => {
    return `${p[0]}-${p[1]}-${p[2]}`
})

console.log(JSON.stringify(result, null, 4));