亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 JavaScript 中分離每個 JSON 對象并將它們分組到一個數組中?

如何在 JavaScript 中分離每個 JSON 對象并將它們分組到一個數組中?

開滿天機 2023-09-21 16:45:49
來自 multer.js 的 req.files 示例[    {        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      },我想動態地將每個 JSON 對象與其字段名分組,并將它們存儲在對象數組中,同時使用它們的字段名編號作為數組索引。組可以在 0 到 9 之間,具體取決于用戶輸入。
查看完整描述

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' } ],

]


查看完整回答
反對 回復 2023-09-21
?
肥皂起泡泡

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)


查看完整回答
反對 回復 2023-09-21
?
DIEA

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) );


查看完整回答
反對 回復 2023-09-21
  • 3 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號