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

183
Vistas
¿Por qué se agrega undefined a mi lista filtrada?

Estoy tratando de escribir un programa de nodo que lea un director de archivo y filtre aquellos sin una determinada extensión de archivo. (Este es un desafío para learnyounode ) Por alguna razón, se agrega a la lista 'indefinido'. puede alguien decirme por que?

 var fs = require('fs') var path = process.argv[2]; var ext = process.argv[3]; var fileList = fs.readdir(path, function callback(err, list){ if (err){ throw err; } var filteredList = list.filter(function(fileName){ var extRx = new RegExp('\.' + 'md' + '$'); return extRx.test(fileName); }); console.log(filteredList.forEach(function(val){console.log(val)})); });

Salidas:

 ACTUAL EXPECTED "CHANGELOG.md" == "CHANGELOG.md" "LICENCE.md" == "LICENCE.md" "README.md" == "README.md" "undefined" != "" "" !=
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Parece que en realidad es un artefacto de su enfoque de consola. Está registrando en la consola cada elemento en la lista filtrada y luego en la consola registrando el resultado de la función forEach. La función forEach no tiene un valor de retorno, por lo que está devolviendo 'indefinido' que luego registra su consola externa.

Considere cambiar el registro de su consola a solo:

 console.log(filteredList);
over 4 years ago · Santiago Trujillo Denunciar

0

No incluyó un ejemplo ejecutable, por lo que es imposible decirle qué está mal con el código que no incluyó, especialmente cuando ni siquiera incluye la lista real de archivos que está tratando de filtrar.

Mira este ejemplo:

 var list = [ "CHANGELOG.md", "LICENCE.md", "README.md", "undefined", "", ]; var filteredList = list.filter(function(fileName){ var extRx = new RegExp('\.' + 'md' + '$'); return extRx.test(fileName); }); console.log(filteredList);

Esto filtra correctamente los valores que desea. Cambie su programa para tener una instrucción console.log para asegurarse de que sabe lo que se está imprimiendo:

 console.log(filteredList);

o:

 console.log(JSON.stringify(filteredList));

Un consejo, no lo compliques tanto:

 var filteredList = list.filter(function(fileName){ var extRx = new RegExp('\.' + 'md' + '$'); return extRx.test(fileName); });

cuando todo lo que necesitas es:

 var filteredList = list.filter(name => name.match(/\.md$/));

Tendrá menos problemas para depurar su código si lo mantiene simple.

Actualizar

Después de leer los comentarios, veo que 'md' es solo un marcador de posición y está usando argumentos de línea de comando en el código real. En ese caso, usaría escape-string-regexp para escapar de la cadena. Ver:

  • https://www.npmjs.com/package/escape-string-regexp

Cuando usa escape-string-regexp :

 var escape = require('escape-string-regexp');

Puedes hacer algo como:

 var extRx = new RegExp('[.]' + escape(ext) + '$');

donde ext es la extensión de archivo que obtuvo como argumento de línea de comando.

El [.] aquí es solo mi preferencia personal de escribir un punto literal en expresiones regulares, creo que es más legible pero no cambia ningún comportamiento aquí. La huida es más importante.

Si no escapa de la cadena porque desea que sus usuarios puedan usar una expresión regular personalizada en lugar de cadenas literales, entonces al menos debería envolver la new RegExp() en try / catch porque puede generar excepciones en sintaxis de expresiones regulares no válida.

over 4 years ago · Santiago Trujillo 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