freeCodeCamp/guide/spanish/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../seek-and-destroy/index.md

7.0 KiB
Raw Blame History

title localeTitle
Seek and Destroy Buscar y destruir

:triangular_flag_on_post: Recuerda usar Read-Search-Ask si te atascas. Tratar de emparejar el programa :busts_in_silhouette: y escribe tu propio código :pencil:

:checkered_flag: 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

:speech_balloon: Sugerencia: 1

Necesitas trabajar con arguments como si fuera una matriz regular. La mejor manera es convertirlo en uno.

intenta resolver el problema ahora

:speech_balloon: 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

:speech_balloon: 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!

señal de advertencia

¡Solución por delante!

:beginner: 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); 
 } 

:rocket: Ejecutar código

Explicación del código:

  1. Cree una matriz de arguments utilizando Array.prototype.slice.call() y guárdelo en la variable args . Usaremos esto para verificar contra arr .

  2. Inicie un ciclo básico for iterar a través de arr . Anide otro bucle for dentro del primero, cambiando la variable entera j y arr a args. Este segundo bucle se repetirá a través de args .

    • Dentro del segundo bucle, cree una sentencia if , verificando estrictamente === que el valor actual de arr[i] es igual a args[j] .

    • Si el valor en el índice actual es igual en ambas matrices, use delete para eliminarlo de arr .

  3. Fuera de los bucles anidados: devuelva la matriz modificada utilizando el objeto Boolean como filtro para cualquier null creado por el operador de delete .

Enlaces relevantes

:sunflower: 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); 
  }); 
 } 

:rocket: Ejecutar código

Explicación del código:

  1. Declare una variable llamada args y args a un nuevo objeto Array from() los arguments pasados a la función. En la misma línea o en la siguiente, use el método slice() en args partir del segundo índice, 1. Esto separa los argumentos utilizados para filtrar en su propia matriz de args .

  2. Devuelva la matriz filtrada, utilizando includes() en la función de devolución de llamada para verificar si val no está en args ; devolviendo true para mantener el valor en la matriz original o false 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

:clipboard: NOTAS PARA LAS CONTRIBUCIONES:

  • :warning: 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 . :traffic_light:
  • Agregue su nombre de usuario solo si ha agregado algún contenido principal relevante . ( :warning: NO elimine ningún nombre de usuario existente )

Ver :point_right: Wiki Challenge Solution Template para referencia.