one
by superhead
JavaScript
var sample = [
"stom-Wt80_S2_L001_R1_001.fastq.gz",
"stom-Wt80_S2_L002_R1_001.fastq.gz",
"stom-fb79_S1_L003_R2_001.fastq.gz",
"stom-fb78_S5_L001_R2_001.fastq.gz",
"stom-Wt80_S2_L003_R1_001.fastq.gz",
"stom-Wt80_S2_L001_R2_001.fastq.gz",
"stom-fb78_S5_L001_R1_001.fastq.gz",
"stom-fb78_S5_L002_R1_001.fastq.gz",
"stom-fb78_S5_L003_R1_001.fastq.gz",
"stom-Wt80_S2_L002_R2_001.fastq.gz",
"stom-Wt80_S2_L003_R2_001.fastq.gz",
"stom-fb79_S1_L001_R1_001.fastq.gz",
"stom-fb79_S1_L002_R1_001.fastq.gz",
"stom-fb79_S1_L003_R1_001.fastq.gz",
"stom-fb79_S1_L001_R2_001.fastq.gz",
"stom-fb79_S1_L001_R2_001.fastq.gz",
"stom-fb78_S5_L002_R2_001.fastq.gz",
"stom-fb78_S5_L003_R2_001.fastq.gz",
];
const fileSorter = (fileList) => {
// find the name of the file
// find the lane number of file => L
// find if the sample is forward- or reverse-ended
let sortedFileList = [];
let regexPattern = /(.*)_L00(\d{1})_R(\d{1})_001.fastq.gz/gmi;
const elemIndex = n => fileList.findIndex((elem) => elem["name"] === n);
const checkNAdd = async(f,fullN,o_type) => {
sortedFileList[elemIndex(f)][o_type] ??= [];
await sortedFileList[elemIndex(f)][o_type].push(fullN);
}
fileList.map(async(fileName) => {
let [start,name,lane,ori,end] = fileName.split(regexPattern);
await elemIndex(name) === -1 && sortedFileList.push({"name": name});
await parseInt(ori) === 1 ? checkNAdd(name,fileName,"fwd_files") : checkNAdd(name,fileName,"rev_files");
})
return sortedFileList;
}
fileSorter(sample);