0

There is an array of objects having property name , resigned , certificate_number and venue and want to convert this array of objects into new array having name and resigned value to be unique and rest data are in foem of array of objec kind of nested array of objects.

**Given Array **

let arr = [
    {
        name : "jhon",
        resigned : "false",
        certificate_number : "1234556",
        venue : "abc"
    },
    {
        name : "jhon",
        resigned : "false",
        certificate_number : "ABC1234",
        venue : "xyz"
    },
    {
        name : "jhon",
        resigned : "false",
        certificate_number : "111111",
        venue : "lkj"
    },
    {
        name : "George",
        resigned : "false",
        certificate_number : "1234556xyzz",
        venue : "abc"
    },
]

Resultant Array I want

let result = [
    {
        name : "jhon",
        resigned : "false",
        restArr : [
            {
                certificate_number : "1234556",
                venue : "abc"
            },
            {
                certificate_number : "ABC1234",
                venue : "xyz"
            },
            {
                certificate_number : "111111",
                venue : "lkj"
            }
        ],
    },
    {
        name : "George",
        resigned : "false",
        restArr : [
            {
                certificate_number : "1234556xyzz",
                venue : "abc"
            },
        ],
    }
]

want to covert Given array of objects into result array of objects.

Jamiec
  • 133,658
  • 13
  • 134
  • 193
hargun singh
  • 167
  • 1
  • 1
  • 7

1 Answers1

2

let arr = [ { name : "jhon", resigned : "false", certificate_number : "1234556", venue : "abc" }, { name : "jhon", resigned : "false", certificate_number : "ABC1234", venue : "xyz" }, { name : "jhon", resigned : "false", certificate_number : "111111", venue : "lkj" }, { name : "George", resigned : "false", certificate_number : "1234556xyzz", venue : "abc" }, ] 


const result = arr.reduce((acc,item) => {
  const matchItem = acc.find(i => i.name === item.name)
  
  if(!matchItem){
     acc.push({
       name:item.name,
       resigned: item.resigned,
       restArr: [{certificate_number: item.certificate_number, venue:item.venue}]
     })
  }else{
     matchItem.restArr.push({certificate_number: item.certificate_number, venue:item.venue})
  }
  
  return acc
}, [])

console.log(result)
Sachila Ranawaka
  • 39,756
  • 7
  • 56
  • 80