Estoy escribiendo un programa para generar subconjuntos de una matriz dada en Javascript. Estoy empujando los subconjuntos a otra matriz de variables globales llamada subMegaSet. Pero cuando accedo a subMegaSet en otra función, la matriz contiene subconjuntos vacíos. Pero si presiono los valores creando otra matriz temporal, los subconjuntos se insertan en subMegaSet. No puedo depurar esto.
function createSubsets(nums, n, arr, index){ if(arr.length >= 0){ let temp = []; for(let item of arr){ temp.push(item); } // subMegaSet.push(arr) ----> Empty array pushed subMegaSet.push(temp); } if(index === n){ return; } for(let i=index; i<n; i++){ arr.push(nums[i]); createSubsets(nums, n, arr, i+1); arr.pop(); }}
Solo hay una matriz arr . Los valores se insertan y extraen de él, pero sigue siendo una sola matriz. Esto significa que cada vez que haces subMegaSet.push(arr) agregas la misma matriz a ese subMegaSet . Por lo tanto, no es posible que subMegaSet[0] sea una matriz diferente a subMegaSet[1] , etc. En todos los índices encontrará la misma matriz. Si al final de todo el procedimiento esa matriz se ha quedado vacía, todo lo que encontrará en subMegaSet será una matriz vacía, repetidamente.
Esta es la razón por la que necesita copiar la matriz en una matriz nueva (separada), cuando la inserta en subMegaSet , para garantizar que:
push o pop futuro en arr no afecta la matriz que acaba de agregar a subMegaSetsubMegaSet son instancias de matriz diferentes.Puede simplificar esa copia usando la sintaxis extendida:
subMegaSet.push([...arr])