Generar todas las combinaciones que puede tener un array

Generar todas las combinaciones de variaciones.

generateAllVariations() {
    let list = []

    this.options.forEach((option, index) => {

        list[index] = []

        option.values.forEach((value, vindex) => {

            list[index].push(JSON.stringify({
                title: option.title,
                value: value
            }))

        })

    })

    let combinations = this.getCombination(list)

    for (let i = 0; i < combinations.length; i++) {

        let variation = JSON.parse(`[${combinations[i]}]`)
        combinations[i] = new ProductStock(variation)

    }


    // Filtrar solo las combinaciones que aún no existen
    let availableCombinations = combinations.filter(combination => {

        return !this.validateVariationExists(combination.variation)

    })

    this.$emit('on-generate-combinations', availableCombinations)
}

Generar combinación, recusivo.

getCombination(arr, pre) {
    let _this = this
    pre = pre || ''

    if (!arr.length) {

        return pre

    }

    let ans = arr[0].reduce(function(ans, value) {

        let separator = pre == '' ? '' : ','

        return ans.concat(_this.getCombination(arr.slice(1), pre + separator + value))

    }, [])

    return ans
}

Fuente Find all the combinations of the array values in JavaScript - GeeksforGeeks