Я хочу получить файлы с одной и той же папкой в один и тот же массив
Вот мой код:
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 } });
});
Это результат, который я получаю:
[
{ "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" }
}
]





Вы можете reduce войти в объект, индексированный folder, создав при необходимости связанный folder объект, нажать на массив files, а затем получить значения этого объекта:
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.info(arr);спасибо, это сработало для меня. но что, если я хочу превратить его в асинхронную функцию
Какая функция? Тем не менее, здесь нет асинхронных операций, поэтому в этом нет необходимости.
потому что мне нужно обработать каждый файл, полученный сразу после него, поэтому я могу просто добавить foreach без проблем?
forEach не является асинхронным, поэтому в этом нет необходимости. Если операция является вам нужна асинхронная, то код будет заметно сложнее.
нет, я знаю, что это не асинхронно, но после того, как я понял вашу точку зрения, я хотел спросить вас, как теперь можно перебирать каждый из этих файлов и обрабатывать их
Вы можете либо поместить механизм внутрь reduce (например, files.push(doSomething({ name })), либо потом перебрать массив, например arr.forEach(({ files }) => files.forEach((file) => /* do something with file */
Извините, была ошибка, я только что обновил свой вопрос