2

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
            });
        })
    }
1
  • Create new object in this body of map and push to a list. Before creating object check for the conditions to filter unnecessary objects Commented Mar 29, 2021 at 16:37

2 Answers 2

1

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)

Sign up to request clarification or add additional context in comments.

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.