Skip to content
Advertisement

separate json object into different index

I have following array which consist of json objects:

items = [
         {
           id: '1',
           name: 'Josh',
           transactionDate: '2012-08-10',
           creditAmount: '200',
           numberBank: '12345',
         },
         {
           id: '1',
           name: 'Josh',
           transactionDate: '2012-08-14',
           creditAmount: '159',
           numberBank: '12345',
         },
         {
           id: '1',
           name: 'Josh',
           transactionDate: '2012-08-15',
           creditAmount: '3421',
           numberBank: '12345',
         },
         {
           id: '2',
           name: 'George',
           transactionDate: '2012-09-15',
           creditAmount: '6000',
           numberBank: '13345',
         },
         {
           id: '2',
           name: 'George',
           transactionDate: '2012-09-16',
           creditAmount: '6565',
           numberBank: '13345',
         }
        ]

I want to separate the array index for each same id

as an example :

        [
         {
           id: '1',
           name: 'Josh',
           transactionDate: '2012-08-10',
           creditAmount: '200',
           numberBank: '12345',
         },
         {
           id: '1',
           name: 'Josh',
           transactionDate: '2012-08-14',
           creditAmount: '159',
           numberBank: '12345',
         },
         {
           id: '1',
           name: 'Josh',
           transactionDate: '2012-08-15',
           creditAmount: '3421',
           numberBank: '12345',
         }
        ],
        [
         {
           id: '2',
           name: 'George',
           transactionDate: '2012-09-15',
           creditAmount: '6000',
           numberBank: '13345',
         },
         {
           id: '2',
           name: 'George',
           transactionDate: '2012-09-16',
           creditAmount: '6565',
           numberBank: '13345',
         }
        ]

How to do like that ? thanks

Answer

you can use reduce to group by id and then the values of the resultant using Object.values
EDIT
??= is the Logical nullish assignment. The right hand side will be assigned whenever the left hand side is null or undefined.

let items = [         {           id: '1',           name: 'Josh',           transactionDate: '2012-08-10',           creditAmount: '200',           numberBank: '12345',         },         {           id: '1',           name: 'Josh',           transactionDate: '2012-08-14',           creditAmount: '159',           numberBank: '12345',         },         {           id: '1',           name: 'Josh',           transactionDate: '2012-08-15',           creditAmount: '3421',           numberBank: '12345',         },         {           id: '2',           name: 'George',           transactionDate: '2012-09-15',           creditAmount: '6000',           numberBank: '13345',         },         {           id: '2',           name: 'George',           transactionDate: '2012-09-16',           creditAmount: '6565',           numberBank: '13345',         }        ]
        
const res = Object.values(items.reduce((acc,curr)=> {
  acc[curr.id]??=[]  //similar to acc[curr.id] = acc[curr.id] || [] in this case
  acc[curr.id].push(curr)
  return acc
},{}))

console.log(res)
Advertisement