Tengo una carpeta con pocos archivos y necesito obtener el tipo/extensión del archivo que coincida con el número que genero en mi variable num , entonces, ¿hay alguna forma de hacerlo?
Mi código actual es:
fs.readdir(dir, (err, files) => { const num = (Math.floor(Math.random() * files.length) + 1).toString(); // here I need to get file type/extension } la variable de files devuelve esto: ['1.jpg', '2.png', '3.gif']
Para encontrar un archivo en una lista de archivos sin importar la extensión, use path.basename y path.extname en los archivos de la lista para cortar las extensiones. Para una sola búsqueda, use files.find() .
const filename = files.find(x => path.basename(x, path.extname(x)) === num.toString()) Sin embargo, para fines de selección aleatoria, puede ser mejor simplemente tomar una entrada aleatoria de los files . La razón es que si todos los archivos están numerados secuencialmente (desde 1), es lo mismo, pero si no están todos numerados secuencialmente (desde 1), lo anterior puede fallar.
const filename = files[num] // and take away + 1 from numEn lugar de hacer coincidir el nombre completo del archivo, puede generar un número aleatorio en ArrayList y obtener ese archivo.
const fs = require("fs"); const path = require("path"); fs.readdir(__dirname, (err, files) => { const randomNum = Math.floor(Math.random() * files.length); // get the random file let randomFileName = files[randomNum]; console.log(randomFileName); /// Get unique exts const exts = [...new Set(files.map((name) => path.extname(name)))]; console.log(exts); const randomExt = Math.floor(Math.random() * exts.length); // Get file with random ext randomFileName = files.find((x) => path.extname(x) === exts[randomExt]); console.log(randomFileName); });