3 回答

TA貢獻1833條經驗 獲得超4個贊
我會使用減少
const data = [?
{ fieldname: 'files0', originalname: 'Screenshot from 2020-05-23 01-52-30.png', },
{ fieldname: 'files0', originalname: 'Screenshot from 2020-05-22 08-44-05.png', },
{ fieldname: 'files1', originalname: 'Screenshot from 2020-05-30 11-36-42.png', },
{ fieldname: 'files1', originalname: 'Screenshot from 2020-05-30 11-36-36.png', },
{ fieldname: 'files1', originalname: 'Screenshot from 2020-05-30 11-36-31.png', }],
arr = data.reduce((acc, cur) => {
? const idx = cur.fieldname.replace("files",""); // get 0, 1
? if (acc[idx]) acc[idx].push(cur); // if already there, just push
? else acc[idx] = [cur];? ? ? ? ? ? // otherwise initialise
? return acc;
},[])?
console.log(arr)
注意:組可以在 0 到 9 之間,具體取決于用戶輸入。
我假設沒有漏洞,因為這可能會導致稀疏數組,所以
data = [?
? ? ?{ fieldname : 'files0' },
? ? ?{ fieldname : 'files0' },
? ? ?{ fieldname : 'files3' },
? ? ?{ fieldname : 'files3' },
?}
會創建一個數組
[
? [ { fieldname : 'files0' }, { fieldname : 'files0' } ],
? null,
? null,
? [ { fieldname : 'files3' }, { fieldname : 'files3' } ],
]

TA貢獻1829條經驗 獲得超6個贊
我盡量不修改你的邏輯來做到這一點。
如果沒有files2,filesArray[2] 將為undefined。
// Omit other fields
const req = {
files: [
{ fieldname: "files0", originalname: 'Screenshot from 2020-05-23 01-52-30.png'},
{ fieldname: "files0", originalname: 'Screenshot from 2020-05-22 08-44-05.png'},
{ fieldname: "files1", originalname: 'Screenshot from 2020-05-30 11-36-42.png'},
{ fieldname: "files1", originalname: 'Screenshot from 2020-05-30 11-36-36.png'},
{ fieldname: "files1", originalname: 'Screenshot from 2020-05-30 11-36-31.png'},
{ fieldname: "files3", originalname: 'Screenshot from 2020-05-30 11-36-42.png'},
{ fieldname: "files3", originalname: 'Screenshot from 2020-05-30 11-36-36.png'},
{ fieldname: "files3", originalname: 'Screenshot from 2020-05-30 11-36-31.png'}
]
}
let filesArray = []
for (let file of req.files) {
const thisFileGroup = parseInt(file.fieldname.match(/\d/g).join(''), 10);
if (!filesArray[thisFileGroup]) {
filesArray[thisFileGroup] = []
}
filesArray[thisFileGroup].push(file)
}
console.log(filesArray[2]) // will be undefined
console.log(filesArray[1]) // will be files1 array
console.log(filesArray)

TA貢獻1820條經驗 獲得超2個贊
如果您不一定需要按索引排序files[index]
在這種情況下,你可以將Array.prototype.reduce()轉換為Object。
您的對象將按屬性(但不是按字母順序)分組,其中包含一個數組,其中的項目具有相同的屬性鍵。使用Object.values()?(如果需要,還可以使用Array.prototype.forEach())?迭代您的對象。fieldname
const data = [
? { fieldname: "files0", originalname: '0-a'},
? { fieldname: "files0", originalname: '0-b'},
? { fieldname: "files1", originalname: '1-a'},
? { fieldname: "files1", originalname: '1-b'},
? { fieldname: "files1", originalname: '1-c'},
];
const byFieldName = data.reduce((ob, d) => {
? if (!ob.hasOwnProperty(d.fieldname)) ob[d.fieldname] = [];
? ob[d.fieldname].push(d);
? return ob;
}, {});
// console.log(byFieldName); // Uncomment to see how it looks like
console.log( Object.values(byFieldName) );
添加回答
舉報