7.0 KiB
title | localeTitle |
---|---|
Seek and Destroy | Buscar y destruir |
Recuerda usar Read-Search-Ask
si te atascas. Tratar de emparejar el programa y escribe tu propio código
Explicación del problema:
Este problema es un poco complicado porque debe familiarizarse con Argumentos, ya que tendrá que trabajar con dos o más, pero en el script solo verá dos. Muchas personas codifican este programa por tres argumentos. Eliminarás cualquier número del primer argumento que sea el mismo que cualquier otro argumento.
Enlaces relevantes
Sugerencia: 1
Necesitas trabajar con arguments
como si fuera una matriz regular. La mejor manera es convertirlo en uno.
intenta resolver el problema ahora
Sugerencia: 2
Necesita filtrar, esto también significa que necesita crear una función de devolución de llamada. Puedes usar varios métodos como: indexOf()
, includes()
. Si necesita otro enfoque, reduce()
también podría ser de utilidad; ¡Sigue leyendo esos documentos!
intenta resolver el problema ahora
Sugerencia: 3
Para convertir arguments
en una matriz, use este código var args = Array.prototype.slice.call(arguments);
intenta resolver el problema ahora
¡Alerta de spoiler!
¡Solución por delante!
Solución de código básico:
function destroyer(arr) {
var args = Array.prototype.slice.call(arguments);
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < args.length; j++) {
if (arr[i] === args[j]) {
delete arr[i];
}
}
}
return arr.filter(Boolean);
}
Explicación del código:
-
Cree una matriz de
arguments
utilizandoArray.prototype.slice.call()
y guárdelo en la variableargs
. Usaremos esto para verificar contraarr
. -
Inicie un ciclo básico
for
iterar a través dearr
. Anide otro buclefor
dentro del primero, cambiando la variable enteraj
y arr a args. Este segundo bucle se repetirá a través deargs
.-
Dentro del segundo bucle, cree una sentencia
if
, verificando estrictamente===
que el valor actual dearr[i]
es igual aargs[j]
. -
Si el valor en el índice actual es igual en ambas matrices, use
delete
para eliminarlo dearr
.
-
-
Fuera de los bucles anidados: devuelva la matriz modificada utilizando el objeto
Boolean
como filtro para cualquiernull
creado por el operador dedelete
.
Enlaces relevantes
-
argumentos
- Array.filter ()
- borrar
- Booleano
Solución de código intermedio:
function destroyer(arr) {
var args = Array.from(arguments).slice(1);
return arr.filter(function(val) {
return !args.includes(val);
});
}
Explicación del código:
-
Declare una variable llamada
args
yargs
a un nuevo objetoArray
from()
losarguments
pasados a la función. En la misma línea o en la siguiente, use el métodoslice()
enargs
partir del segundo índice, 1. Esto separa los argumentos utilizados para filtrar en su propia matriz deargs
. -
Devuelva la matriz filtrada, utilizando
includes()
en la función de devolución de llamada para verificar sival
no está enargs
; devolviendotrue
para mantener el valor en la matriz original ofalse
para eliminarlo.
Enlaces relevantes
Solución avanzada de código:
const destroyer = (arr, ...args) => arr.filter(i => !args.includes(i));
Explicación del código:
- Código usando la sintaxis ES6 para declarar la función usando las funciones de flecha.
- Usando el operador de propagación para recuperar los argumentos.
- Devuelve la matriz filtrada, utilizando
includes()
.
Enlaces relevantes
NOTAS PARA LAS CONTRIBUCIONES:
- NO agregue soluciones que sean similares a las soluciones existentes. Si cree que es similar pero mejor , intente fusionar (o reemplazar) la solución similar existente.
- Agregue una explicación de su solución.
- Categorice la solución en una de las siguientes categorías: Básica , Intermedia y Avanzada .
- Agregue su nombre de usuario solo si ha agregado algún contenido principal relevante . ( NO elimine ningún nombre de usuario existente )
Ver
Wiki Challenge Solution Template
para referencia.