Sé que .slice() solo puede funcionar en matrices y cadenas. Estoy llamando a .slice() en una matriz y sigo recibiendo ese error. Aquí está mi código:
var subsets = function(nums) { let subsets = []; subsets.push([]); for(let i = 0; i < nums.length; i++) { let currentNumber = nums[i]; for(let j = 0; j < subsets.length; j++) { let currentSubset = subsets[j].slice(0); let set1 = currentSubset.push(currentNumber); subsets.push(set1) } } return subsets; };Ahora, por otro lado, esto funciona bien si lo inserto en el ciclo for.
const set1 = subsets[j].slice(0); // clone the permutation set1.push(currentNumber); subsets.push(set1);Array.prototype.push devuelve un número, la nueva longitud de la matriz.
Por MDN :
Valor devuelto
La nueva propiedad de longitud del objeto sobre el que se llamó al método.
Cuando subsets.push(set1) , empuja un número y los números no tienen .slice .
Deberías hacer subsets.push(currentSubset) en su lugar.
let set1 = currentSubset.push(currentNumber); subsets.push(set1) Aquí currentSubset.push() devolverá la longitud de la nueva matriz y la que almacena en la matriz de subsets . Y que has declarado matriz de matriz. Entonces, en la próxima iteración, los subsets[1] serán la longitud de la matriz que almacenó desde set1 no una matriz. Así que supongo que te perdiste algo de lógica allí.