Digamos que tengo la siguiente lista de archivos:
foo-bar_lorem.ext foo-bar_ipsum.ext foo-bar_dolor.ext foo-baz_lorem.ext foo-baz_ipsum.ext foo-baz_dolor.ext foo-amet.ext foo-sic.extLo que me gustaría hacer es crear nuevas matrices basadas en lo que hay entre el guión y el guión bajo, mientras tengo una matriz de un solo objeto cuando el archivo no tiene un guión bajo:
Las matrices resultantes deben ser las siguientes:
array1 = ['foo-bar_lorem.ext', 'foo-bar_ipsum.ext', 'foo-bar_dolor.ext']; array2 = ['foo-baz_lorem.ext', 'foo-baz_ipsum.ext', 'foo-baz_dolor.ext']; array3 = ['foo-amet.ext']; array4 = ['foo-sic.ext'];Así es como actualmente estoy recuperando la lista de archivos usando fs:
const path = require('path'); const fs = require('fs'); const myFolder = path.join(__dirname); fs.readdir(myFolder, function (err, files) { if (err) { return console.log('Unable to scan directory: ' + err); } //listing all files using forEach files.forEach(function (file) { console.log(file); }); });esta es la lógica que debe hacerse con los retornos de objetos de archivo de fs.readdir
const files = ['foo-bar_lorem.ext', 'foo-bar_ipsum.ext', 'foo-bar_dolor.ext', 'foo-baz_lorem.ext', 'foo-baz_ipsum.ext', 'foo-baz_dolor.ext', 'foo-amet.ext', 'foo-sic.ext'] const res = files.reduce((acc, file) => { const dir = file.split("-")[1].split("_")[0] acc[dir] = [...(acc[dir] ? acc[dir] : []), file] return acc; }, {}); console.log(Object.values(res))después de incrustarlo dentro de la devolución de llamada
function getFiles(myFolder) { return new Promise((resolve, reject) => { try { fs.readdir(myFolder, function (err, files) { if (err) { return console.log('Unable to scan directory: ' + err); } const res = files.reduce((acc, file) => { const dir = file.split("-")[1].split("_")[0] acc[dir] = [...(acc[dir] ? acc[dir] : []), file] return acc; }, {}); resolve(Object.values(res)) }); } catch (err) { reject(err) } }) }