Estoy tratando de devolver los valores en el argumento [0] que no son iguales a los valores de los argumentos [1] y así sucesivamente.
Creé una variable 'let argArr' que contiene los valores de los argumentos después del primero, estoy tratando de entender por qué en mi .filter () no puedo apuntar a 'let argArr'.
function destroyer(arr) { let argArr = []; for (let i = 1; i < arguments.length; i++) { argArr.push(arguments[i]) } return arr.filter(i => i !== argArr) } console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));Está comparando el elemento de una matriz arr con el argArr lo que está mal. La forma correcta es verificar si el elemento está dentro argArr y filtrar si es así.
return arr.filter(i => !argArr.includes(i))
En lugar de usar arguments , especifique explícitamente la matriz como el primer argumento y luego use los parámetros de descanso para reunir todos los argumentos restantes en una matriz. Luego use el filter para devolver solo aquellos elementos en la matriz que no están en la matriz rest .
function destroyer(arr, ...rest) { return arr.filter(el => !rest.includes(el)); } console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));Use el operador de propagación para tratar los argumentos como una matriz normal
function foo() { return [...arguments].filter(el => el); } console.log(foo(1,2,3))