Dacă altcineva și de a comuta caz alternativă în Javascript

0

Problema

În căutarea pentru o alternativă la declarații condiționale. După cum puteți vedea de la codul meu, procesul este prea plictisitor și dezorganizat. Acesta va deveni din ce în ce mai dificil să se mențină cod ca acesta crește în dimensiune. Pentru a evita această situație, eu sunt în căutarea de alternative.

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

Cel mai bun răspuns

1

Te-ai putea muta o anumită logică în configurare. Încercați să armonizeze controalele astfel că toate acestea depind de expresii regulate. Deci, pentru o lungime minimă de 6, utilizare /....../ ca expresie regulată. De asemenea, asigurați-vă că expresia regulată nu va accepta un șir gol în cazul în care câmpul este considerat necesar.

De exemplu:

// 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

Asta e o abordare buna. Codul este simplu de a actualiza și de întreținut. :D
Sazzad Hossain
0

Puteți accesa coloană într-un obiect js prin utilizarea myObject[nameOfYourColumn]

Deci, ne putem gândi de a construi o metodă generică astfel de prognoze

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`;
  }
}

metoda ta va deveni

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

Acum, valida funcție este utilizată atât pentru parolele și e-mailuri.

Cu toate acestea, acest lucru poate fi împărțită în două funcții, una pentru validarea e-mailuri, iar celălalt pentru validarea parole. Acest lucru ajută pentru a decupla acțiunea de validare e-mailuri de la validarea parole, și de a face debugging/menținerea mai ușoară.

De asemenea, puteți încerca ternare operatorii dacă doriți să faceți dacă-altceva clauze mai puțin aglomerat.

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

puteți încerca comutator caz, în loc de Dacă Altceva
Nilesh

În alte limbi

Această pagină este în alte limbi

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