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