Javascript'te İf else ve switch case alternatifi

0

Soru

Koşullu ifadeye bir alternatif arıyorum. Kodumdan da görebileceğiniz gibi, süreç aşırı derecede tekrarlayıcı ve dağınık. Boyut olarak büyüdükçe kodu korumak giderek zorlaşacaktır. Bu durumdan kaçınmak için alternatifler arıyorum.

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

En iyi cevabı

1

Bazı mantığı yapılandırmaya taşıyabilirsiniz. Hepsi düzenli ifadeler bağımlı olan bu tür kontrol uyumlu hale getirmeyi deneyin. Bu nedenle, en az 6 uzunluk için kullanın /....../ normal ifade olarak. Ayrıca, alanın gerekli görülmesi durumunda normal ifadenin boş bir dizeyi kabul etmeyeceğinden emin olun.

Örneğin:

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

Bu iyi bir yaklaşım. Kodun güncellenmesi ve bakımı kolaydır. :D
Sazzad Hossain
0

Kullanarak bir js nesnesindeki sütuna erişebilirsiniz myObject[nameOfYourColumn]

Böylece bunun gibi genel bir yöntem oluşturmayı düşünebiliriz

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

yönteminiz şöyle olacak

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

Şu anda, doğrulama işlevi hem şifreler hem de e-postalar için kullanılıyor.

Ancak bu, biri e-postaları doğrulamak, diğeri şifreleri doğrulamak için olmak üzere iki işleve ayrılabilir. Bu, e-postaların doğrulanması eyleminin parolaların doğrulanmasından ayrılmasına yardımcı olur ve hata ayıklamayı/korumayı kolaylaştırır.

Ayrıca, ıf-else cümlelerinizi daha az karmaşık hale getirmek istiyorsanız üçlü işleçleri deneyebilirsiniz.

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

başka bir şey yerine davayı değiştirmeyi deneyebilirsiniz
Nilesh

Diğer dillerde

Bu sayfa diğer dillerde

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