example of req.files from multer.js
[
{
fieldname: files0,
originalname: 'Screenshot from 2020-05-23 01-52-30.png',
encoding: '7bit',
mimetype: 'image/png',
destination: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133',
filename: '1606822252923_Screenshot from 2020-05-23 01-52-30.png',
path: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133/1606822252923_Screenshot from 2020-05-23 01-52-30.png',
size: 172092
},
{
fieldname: files0,
originalname: 'Screenshot from 2020-05-22 08-44-05.png',
encoding: '7bit',
mimetype: 'image/png',
destination: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133',
filename: '1606822252925_Screenshot from 2020-05-22 08-44-05.png',
path: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133/1606822252925_Screenshot from 2020-05-22 08-44-05.png',
size: 440592
},
{
fieldname: files1,
originalname: 'Screenshot from 2020-05-30 11-36-42.png',
encoding: '7bit',
mimetype: 'image/png',
destination: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133',
filename: '1606822252930_Screenshot from 2020-05-30 11-36-42.png',
path: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133/1606822252930_Screenshot from 2020-05-30 11-36-42.png',
size: 477511
},
{
fieldname: files1,
originalname: 'Screenshot from 2020-05-30 11-36-36.png',
encoding: '7bit',
mimetype: 'image/png',
destination: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133',
filename: '1606822252931_Screenshot from 2020-05-30 11-36-36.png',
path: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133/1606822252931_Screenshot from 2020-05-30 11-36-36.png',
size: 223362
},
{
fieldname: files1,
originalname: 'Screenshot from 2020-05-30 11-36-31.png',
encoding: '7bit',
mimetype: 'image/png',
destination: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133',
filename: '1606822252932_Screenshot from 2020-05-30 11-36-31.png',
path: 'public/uploads/projects/0a480789-eb14-4fe4-bb89-44aa741efe33/proposals/chma00000133/1606822252932_Screenshot from 2020-05-30 11-36-31.png',
size: 260419
}
]
I want to dynamically group each JSON objects with their fieldname and store them in an array of objects while using their fieldname number as their array index.
The groups can be between 0 to 9, depending on the user input.
The result I'm hoping for is something like
someArr = [
[
{
fieldname: files0
originalname: somevalue,
...
size: some value
},
{
fieldname: files0,
originalname: somevalue,
...
size: some value
},
]
,
[
{
fieldname: files1,
originalname: somevalue,
...
size: some value
},
{
fieldname: files1,
originalname: somevalue,
...
size: some value
},
{
fieldname: files1,
originalname: somevalue,
...
size: some value
},
]
...
]
and if it exists, someArr[9] would return
[
{
fieldname: files9,
originalname: somevalue,
...
size: some value
},
{
fieldname: files9,
originalname: somevalue,
...
size: some value
},
]
What I've tried was first parse integers from fieldnames and reassign them as their values for better sorting with for-loops
Object.keys(req.files).forEach((key) => {
const thisFile = req.files[key];
const thisFileGroup = parseInt(thisFile.fieldname.match(/\d/g).join(''), 10);
// rename fieldname from files0, files1 ... to 0 , 1 ....
req.files[key].fieldname = thisFileGroup;
});
But from here, I can't find where to push this element(thisFile) to, since I cannot predeclare each arrays at the upper scope since they also need to be created dynamically.
0,1etc. Using object is great for grouping, but the final order will not be organized by the keys alphabetical order.