Estoy tratando de crear este script: https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/seek-and-destroy
Después del comentario "Verificar y eliminar" es donde tengo el problema. Intento verificar todos los elementos de la matriz 'theCheck' con los elementos de 'destructores' y, si los elementos no coinciden, el script enviará ese valor a la matriz de salida.
Pero empuja cada elemento independientemente.
Valor de salida esperado: [1,1]
Valor del valor de salida actual: [1,2,3,1,2,3]
function destroyer(arr) { let theCheck = []; let destroyers = []; let output = []; for (let i = 1; i < arguments.length; i++) { destroyers.push(arguments[i]); } for (let i = 0; i < arguments[0].length; i++) { theCheck.push(arguments[0][i]) } //Verify and delete var j = 0 for (let i = 0; i < theCheck.length; i++) { for (j = 0; j < destroyers.length; j++) { if (theCheck[i] !== destroyers[j]) { output.push(theCheck[i]) break; } } } console.log(theCheck) console.log(destroyers) console.log(output) return arr; } destroyer([1, 2, 3, 1, 2, 3], 2, 3);Con el código actual, está recorriendo los destructores y cada vez que encuentra un destructor que no coincide con el elemento que está comprobando, lo está agregando a la salida. Pero debido a que tiene dos elementos en la matriz de destructores, está garantizado que uno de los dos no coincidirá con el elemento en particular que está verificando.
A continuación, se muestra una versión en la que determinamos si alguno de los destructores coincide con el elemento que estamos comprobando y, solo si no es así, lo agregamos a la salida:
function destroyer(arr) { let theCheck = []; let destroyers = []; let output = []; for (let i = 1; i < arguments.length; i++) { destroyers.push(arguments[i]); } for (let i = 0; i < arguments[0].length; i++) { theCheck.push(arguments[0][i]) } //Verify and delete var j = 0 for (let i = 0; i < theCheck.length; i++) { let found = false; for (j = 0; j < destroyers.length; j++) { if (theCheck[i] === destroyers[j]) { found = true; } } if(!found) output.push(theCheck[i]); } console.log(theCheck) console.log(destroyers) console.log(output) return arr; } destroyer([1, 2, 3, 1, 2, 3], 2, 3);Podría usar la función include para arreglar esto un poco:
function destroyer(arr) { let theCheck = []; let destroyers = []; let output = []; for (let i = 1; i < arguments.length; i++) { destroyers.push(arguments[i]); } for (let i = 0; i < arguments[0].length; i++) { theCheck.push(arguments[0][i]) } //Verify and delete var j = 0 for (let i = 0; i < theCheck.length; i++) { if(!destroyers.includes(theCheck[i])) output.push(theCheck[i]); } console.log(theCheck) console.log(destroyers) console.log(output) return arr; } destroyer([1, 2, 3, 1, 2, 3], 2, 3); function destroyer(input, ...arr) { return input.filter(element => !arr.includes(element)); } console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));