ถ้าอื่นและเปลี่ยนคดีทางเลือกในจาวาสคริปต์

0

คำถาม

มองหาทางเลือกกับเงื่อนไขเซลการปราศรัยได้เลย อย่างที่คุณสามารถเห็นอกจากรหัสในการคือรู้สึกอินกับ repetitious และไม่มีระเบียบ. มันจะกลายเป็นสิ่งที่ยากขึ้นที่จะรักษารหัสที่มันจะเติบโตขนาดด้วย เพื่อที่จะหลีกเลี่ยงสถานการณ์นี้,ฉันกำลังมองหาเพื่อนอื่นทำได้แล้ว

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

คำตอบที่ดีที่สุด

1

คุณสามารถแค่เคลื่อนย้ายของบางตรรกะในการปรับแต่งได้ พยายามที่จะ harmonise เช็คเรื่องนั้นพวกเขาขึ้นอยู่กับเงื่อนไขการค้นหา. ดังนั้นสำหรับน้อยที่สุดความยาวของ 6 ใช้ /....../ เป็นเงื่อนไขการค้นหา. ยังทำให้แน่ใจว่าเงื่อนไขการค้นหาจะไม่ยอมรับว่าข้อความในคดีที่สนามถือว่าเป็นต้องการ.

สำหรับตัวอย่าง:

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

นั่นคือที่ดีที่ใกล้เข้ามาแล้ว รหัสเป็นธรรมดาสำหรับปรับปรุงและ maintainable. :D
Sazzad Hossain
0

คุณสามารถเข้าใช้งานคอลัมน์ใน js โดยการใช้วัตถุ myObject[nameOfYourColumn]

ดังนั้นเราสามารถคิดสร้างทั่วไปวิธีการแบบนี้

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

ของคุณวิธีการจะเป็น

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

ตอนนี้ที่พิสูจน์ความถูกต้องของฟังก์ชันนี้จะถูกใช้สำหรับทั้งสองและรหัสผ่านอีเมล์

อย่างไรก็ตามสามารถแยกออกเป็นสองฟังก์ชันหนึ่งสำหรับ validating อีเมล์และอีกคนสำหรับ validating รหัสผ่าน มันจะช่วยให้ decouple งการกระทำของ validating อีเมลจาก validating รหัสผ่านและทำให้ดีบั๊กโปรแกรม/ต้องรักษาง่ายขึ้น

แล้วคุณสามารถลอง ternary operators ถ้าคุณต้องการให้คุณหา-อีก clauses น้อย cluttered.

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

คุณสามารถลองเปลี่ยนคดีแทนที่จะเป็นถ้าอื่น
Nilesh

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่