首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Javascript中选择“否则”和“切换情况”

问在Javascript中选择“否则”和“切换情况”
EN

Stack Overflow用户
提问于 2021-11-24 06:48:12
回答 3查看 446关注 0票数 0

寻找条件语句的替代方法。正如您从我的代码中所看到的,这个过程过于重复和混乱。随着代码大小的增加,维护代码将变得越来越困难。为了避免这种情况,我正在寻找替代方案。

​

代码语言:javascript
复制
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;
}

​

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-24 07:09:42

您可以将一些逻辑转移到配置中。尝试协调检查,使它们都依赖于正则表达式。因此,对于最小长度6,使用/....../作为正则表达式。此外,如果字段被认为是必需的,请确保正则表达式不会接受空字符串。

例如:

代码语言:javascript
复制
// 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;
}
票数 1
EN

Stack Overflow用户

发布于 2021-11-24 07:06:42

现在,验证功能用于密码和电子邮件。

然而,这可以分为两个功能,一个用于验证电子邮件,另一个用于验证密码。这有助于将验证电子邮件的操作与验证密码分离开来,并使调试/维护更容易。

此外,如果希望使if-else子句不那么杂乱,可以尝试三值运算符。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2021-11-24 07:07:10

可以使用myObject[nameOfYourColumn]访问js对象中的列。

因此,我们可以考虑构建这样一个通用方法

代码语言:javascript
复制
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`;
  }
}

你的方法会变成

代码语言:javascript
复制
function validate(values) {
  let errors = {};
  //   Email Error
  validateColumn(values, 'email', '/\S+@\S+\.\S+/', errors);
  //   Password Error
  validateColumn(values, 'password', '/^.{6,}$/', errors);
  return errors;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70091731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档