Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

100
Vistas
¿Mapear y filtrar en un solo método?

El siguiente código procesa una lista de rutas de archivo y debe devolver solo los nombres de archivo (sin extensión) de los archivos XML. Actualmente llegué a esto:

 const filteredFiles = files .map(f => f.match(/.*\/(.*)\.xml/)) // map to regex match with capture .filter(v => v) // non-matches returned null and will be filtered out here .map(m => m[1]) // map out the regex capture

Encuentro este código bastante engorroso. ¿No hay forma de combinar la coincidencia y el filtrado de una manera más "eficiente"? Y por "eficiente" me refiero a código legible-eficiente y no eficiente en el tiempo, ya que la matriz de entrada contiene 100 valores como máximo, pero la mayor parte del tiempo entre 10 y 20.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Esto no resuelve su necesidad de mapear y filtrar los valores que no coinciden de una sola vez... pero facilita un paso al usar el operador de encadenamiento opcional ?.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

También cambié ligeramente la expresión regular para permitir el nombre de archivo sin especificar la ruta.

 const files = [ './path/to/filename_01.xml', 'non_matching_value', './path/to/filename_02.xml', './path/to/filename_03.xml', './path/to/filename_04.xml', 'filename_05.xml', ]; const filteredFiles = files .map(filename => filename.match(/^(.*\/)?(.*)\.xml/)?.[2]) .filter(filename => filename); console.log(filteredFiles);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede (ab) usar un mapa plano :

 const filteredFiles = files.flatMap((f)=>{ let match = f.match('...'); if (match) { return [match[1]] } else { return [] } })

Aunque no estoy seguro de si es mejor que el original.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Mapa y filtro , también conocido como reducir

 const rx = /\/(.*)\.xml$/; const filteredFiles = files.reduce((arr, f) => { const match = f.match(rx); return match ? [...arr, match[1]] : arr; }, []);
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda