0

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:

  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?

1 Answer 1

1

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

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

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.