If else et switch cas de remplacement en Javascript

0

La question

Vous cherchez une alternative à l'instruction conditionnelle. Comme vous pouvez le voir dans mon code, le processus est trop répétitive et désorganisé. Il va devenir de plus en plus difficile de maintenir le code comme il grandit en taille. Afin d'éviter cette situation, je suis à la recherche d'alternatives.

function validate(values) {
  let errors = {};
  //   Email Error
  if (!values.email) {
    errors.email = "Email address is required";
  } else if (!/\S+@\S+\.\S+/.test(values.email)) {
    errors.email = "Email address is invalid";
  }
  //   Password Error
  if (!values.password) {
    errors.password = "Password is required";
  } else if (values.password.length < 6) {
    errors.password = "Password must be 6 or more characters";
  }
  return errors;
}

3

La meilleure réponse

1

Vous pouvez passer un peu de logique dans la configuration. Essayez d'harmoniser les contrôles tels qu'ils dépendent tous des expressions régulières. Donc, pour une durée minimale de 6 /....../ comme l'expression régulière. Assurez-vous également que l'expression régulière n'acceptera pas une chaîne vide dans le cas où le champ est considéré comme nécessaire.

Par exemple:

// All specifics are encoded here:
const checks = [
    { field: "email", regex: /^\S+@\S+\.\S+$/, name: "Email address", msg: "must be 6 or more characters" },
    { field: "password", regex: /....../, name: "Password", msg: "is invalid" },
];

// ...while this is now (more) generic:
function validate(values) {
    const errors = {};
    for (const {field, regex, name, msg} of checks) {
        if (!regex.test(values[field])) {
            errors[field] = name + " " + (values[field] ? msg : "is required");
        }
    }
    return errors;
}
2021-11-24 07:09:42

C'est une bonne approche. Le code est simple à mettre à jour et facile à entretenir. :D
Sazzad Hossain
0

Vous pouvez accéder à la colonne dans un js objet à l'aide de myObject[nameOfYourColumn]

On peut donc penser construire une méthode générique comme ceci

function validateColumn(object, columnName, format, errors) {
  if (!object[columnName]) {
       errors[columnName] = `${columnName} is required`;
  } else if (!format.test(object[columnName])) {
      errors[columnName] = `${columnName} is invalid`;
  }
}

votre méthode va devenir

function validate(values) {
  let errors = {};
  //   Email Error
  validateColumn(values, 'email', '/\S+@\S+\.\S+/', errors);
  //   Password Error
  validateColumn(values, 'password', '/^.{6,}$/', errors);
  return errors;
}
2021-11-24 07:07:10
0

Maintenant, le fait de valider la fonction est utilisé pour les mots de passe et e-mails.

Cependant, cela peut être divisée en deux fonctions, l'une pour la validation des e-mails, et l'autre pour la validation des mots de passe. Cela permet de dissocier l'action de validation des e-mails à partir de la validation des mots de passe, et rend le débogage ou le maintien de plus facile.

Aussi, vous pouvez essayer ternaire opérateurs si vous voulez faire de votre si-sinon clauses moins encombré.

function validate(values) {
    errors = {};
    errors.email = validate_email(values.email) == null
        ? null : validate_email(values.email);

    errors.password = validate_password(values.password) == null 
        ? null : validate_password(values.password);
  
    return errors;
}

function validate_email(email) {
    if (email == null) {
        return "Email address is required";
    } else if (!/\S+@\S+\.\S+/.test(values.email)) {
        return "Email address is invalid";
    } 
    
    return null;
}

//validate_password left as an exercise
2021-11-24 07:07:15

vous pouvez essayez de changer de cas au lieu de if Else
Nilesh

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................