Tenía una matriz como esta a continuación
const myArray = [1, 2, 3, 4, 5, 6];
y pude obtener todas las combinaciones posibles con esta función.
function getCombinations(list) { var set = [], listSize = list.length, combinationsCount = 1 << listSize, combination; for (var i = 1; i < combinationsCount; i++) { var combination = []; for (var j = 0; j < listSize; j++) { if (i & (1 << j)) { combination.push(list[j]); } } set.push(combination); } return set; }funciona bien y obtengo 63 combinaciones posibles con la matriz anterior
mi problema comienza aquí. Quiero todas las combinaciones posibles, pero con una excepción, mi conjunto de elementos está en un grupo como este a continuación.
const myArray = [ { groupId: "foo", value: 1 }, { groupId: "foo", value: 2 }, { groupId: "foo", value: 3 }, { groupId: "bar", value: 4 }, { groupId: "bar", value: 5 }, { groupId: "zoo", value: 6 }, ];Quiero obtener todas las combinaciones posibles, pero cada combinación solo debe tener un elemento de un grupo
por ejemplo, hay una salida correcta que estoy buscando
const myArray = [ { groupId: "foo", value: 1 }, ]; const myArray = [ { groupId: "foo", value: 1 }, { groupId: "zoo", value: 6 }, ]; const myArray = [ { groupId: "foo", value: 1 }, { groupId: "bar", value: 5 }, { groupId: "zoo", value: 6 }, ]; const myArray = [ { groupId: "bar", value: 5 }, { groupId: "zoo", value: 6 }, ];Como puede ver, quiero que cada grupo solo tenga uno de sus elementos en las combinaciones generadas
Estas son las combinaciones que no quiero que se generen
const myArray = [ { groupId: "bar", value: 4 }, { groupId: "bar", value: 5 }, { groupId: "zoo", value: 6 }, ]; const myArray = [ { groupId: "foo", value: 1 }, { groupId: "zoo", value: 6 }, { groupId: "zoo", value: 7 }, ]; tenemos dos elementos con la etiqueta de grupo zoo No quiero estas salidas.