Modify key and values of an Array of Object and copy it into another Array of Object

Viewed 53

I have an array of objects. I have to copy the values into another object with modified keys and values. What I mean by modified is as follows:

  1. type key shouldn't be copied.
  2. _applicant/_spouse and has to be removed from key
  3. values true has to be converted to "Y" and false has to be converted to "N"

Source Obj:

MemberObj:[{
  type: 'applicant',
  dateOfBirth_applicant: '10-10-1980',
  seekingCoverage_applicant: false
  relationshipToPrimary: 'SELF'
}, 
{
  type: 'spouse',
  dateOfBirth_spouse: '10-10-1990',
  seekingCoverage_spouse: true
  relationshipToPrimary: 'DEPENDANT'
}];

Destination Object:

prepareMemberData: [
   {
      dateOfBirth: '10-10-1980',
      seekingCoverage: "N",
      relationshipToPrimary: 'SELF'
    },
    {
      dateOfBirth_spouse: '10-10-1990',
      seekingCoverage: "Y",
      relationshipToPrimary: 'DEPENDANT'
    }];

Code:

let prepareMemberData = [];
    if (MemberObj.length){
        prepareMemberData = MemberObj.map(obj => {
            console.log('obj', obj, typeof obj);
            return Object.entries(obj).forEach(([key, value]) => {
               //Not sure how to proceed. I tried Object.assign. But didn't get the expected results
            });
        })
    }
2 Answers

You could first map over each object and then use reduce on Object.entries to modify each individual object.

const data = [{
    type: 'applicant',
    dateOfBirth_applicant: '10-10-1980',
    seekingCoverage_applicant: false,
    relationshipToPrimary: 'SELF'
  },
  {
    type: 'spouse',
    dateOfBirth_spouse: '10-10-1990',
    seekingCoverage_spouse: true,
    relationshipToPrimary: 'DEPENDANT'
  }
]

const result = data.map(({ type, ...rest }) => {
  return Object.entries(rest).reduce((r, [key, value]) => {
    ['_spouse', '_applicant'].some(e => {
      if (key.includes(e)) key = key.replace(e, '')
    })

    if (typeof value === 'boolean') {
      value = value ? 'Y' : 'N'
    }

    r[key] = value;

    return r;
  }, {})
})

console.log(result)

You can create new object in the map function and return it. Inside map function you can transform it to whatever your requirements are.

const MemberObj = [{
  type: 'applicant',
  dateOfBirth_applicant: '10-10-1980',
  seekingCoverage_applicant: false,
  relationshipToPrimary: 'SELF'
}, 
{
  type: 'spouse',
  dateOfBirth_spouse: '10-10-1990',
  seekingCoverage_spouse: true,
  relationshipToPrimary: 'DEPENDANT'
}];

let prepareMemberData = [];
    if (MemberObj.length){
        prepareMemberData = MemberObj.map(obj => {
            console.log('obj', obj, typeof obj);
            
            const dateOfBirth = obj['dateOfBirth_spouse'] ? obj['dateOfBirth_spouse'] : obj['dateOfBirth_applicant'];
            const seekingCoverage = obj['seekingCoverage_spouse'] ? obj['seekingCoverage_spouse'] : obj['seekingCoverage_applicant'];
            
            const newObj = {
                dateOfBirth: dateOfBirth,
              seekingCoverage: seekingCoverage === true ? 'Y' : 'N',
              relationshipToPrimary: obj['relationshipToPrimary']
            };
            return newObj;
            
        });
    }

console.log("member obj", MemberObj);
console.log('members obj transformed', prepareMemberData);

Related