Reputation: 491
I want to get the files with the same folder into the same array
Here is my code :
const pathFile = [
'modules/main/main1/main.js',
'modules/server/server1/server.js',
'modules/server/server2/server.js',
];
pathFile.forEach((p) => {
const middle = p.split(/\//g);
middle.pop();
const fileFolder = middle[Math.floor(middle.length - 1) / 2];
array.push({ folder: fileFolder, files: { name: p } });
});
This is the result i get :
[
{ "folder": "main", "files": { "name": "modules/main/main1/main.js" } },
{
"folder": "server",
"files": { "name": "modules/server/server1/server.js" }
},
{
"folder": "server",
"files": { "name": "modules/server/server2/server.js" }
}
]
Upvotes: 1
Views: 35
Reputation: 370849
You can reduce
into an object indexed by the folder
, creating the associated folder
object if needed, push to the files
array, then get that object's values:
const pathFile = [
'modules/main/main1/main.js',
'modules/server/server1/server.js',
'modules/server/server2/server.js',
];
const obj = pathFile.reduce((a, name) => {
const folder = name.split('/')[1];
if (!a[folder]) {
a[folder] = { folder, files: [] };
}
a[folder].files.push({ name });
return a;
}, {});
const arr = Object.values(obj);
console.log(arr);
Upvotes: 1