根据文件名的片段从列表中创建新数组



假设我有以下文件列表:

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

我想做的是根据短划线和下划线之间的内容创建新的数组,同时在文件中没有下划线时创建一个单一对象的数组:

生成的数组应如下所示:

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'];

这就是我目前使用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);
});
});

这是从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))

在将其嵌入回调之后

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)
}
})
}

最新更新