Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to get property from array of objects by property name?

I have object which is property are arrays of objects:

   messages = {
    authentication: [
      { type: 'signinFail', message: 'Login Fail! Wrong password or email.' }
    ],
    requiredText: [
      { type: 'required', message: 'This field is required.' }
    ],
    email: [
      { type: 'required', message: 'Email is required.' },
      { type: 'email', message: 'Email has an incorrect format.' }
    ],
    confirm_password: [
      { type: 'required', message: 'Password confirmation is required.' },
      { type: 'areNotEqual', message: 'Password mismatch' }
    ],
    password: [
      { type: 'required', message: 'Password is required' },
      { type: 'minlength', message: 'Password must contain 5 or more characters.' },
      { type: 'pattern', message: 'Your password must contain at least one uppercase, one lowercase, and one number' }
    ]
  };

I need to get massage from structire above while I provide two strings, subject and type to function that i created:

 getMessage(subject, type) : string {
    return this.messages[subject][type]; 
  }

For example, if I provide:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

  subject = "confirm_password"
  type = "minlength"

I expect to get this message from the getMessage function:

'Password must contain 5 or more characters.'

but I get error undefined.

Any idea how to get the desired message if I provide the subject and type?

>Solution :

You need to look for the right entry in your array by using .find(). The return the .message property of the found array element:

const messages = {
    authentication: [
      { type: 'signinFail', message: 'Login Fail! Wrong password or email.' }
    ],
    requiredText: [
      { type: 'required', message: 'This field is required.' }
    ],
    email: [
      { type: 'required', message: 'Email is required.' },
      { type: 'email', message: 'Email has an incorrect format.' }
    ],
    confirm_password: [
      { type: 'required', message: 'Password confirmation is required.' },
      { type: 'areNotEqual', message: 'Password mismatch' }
    ],
    password: [
      { type: 'required', message: 'Password is required' },
      { type: 'minlength', message: 'Password must contain 5 or more characters.' },
      { type: 'pattern', message: 'Your password must contain at least one uppercase, one lowercase, and one number' }
    ],
    getMessage: function(subject,type){return this[subject].find(el=>el.type==type).message}
  };

function getMessage(subject, type){
    return messages[subject].find(el=>el.type==type).message; 
}

console.log(getMessage("password","minlength"));          // function call
console.log(messages.getMessage("password","minlength")); // method call of messages
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading