首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化If语句

简化If语句
EN

Stack Overflow用户
提问于 2018-11-19 03:23:21
回答 3查看 43关注 0票数 0

我正在做一个赋值工作,我很清楚if语句和switch语句。我有这样一串代码:

代码语言:javascript
复制
if (testLength(document.forms[0].lname) == false) {
    isValid = false;
}

if (testLength(document.forms[0].fname) == false) {
    isValid = false;
}

if (testLength(document.forms[0].address) == false) {
    isValid = false;
}

if (testLength(document.forms[0].summary) == false) {
    isValid = false;
}

if (testPattern(document.forms[0].account, /^ACT\d{6}$/) == false) {
    isValid = false;
}

if (testPattern(document.forms[0].department, /^DEPT\d{3}$/) == false) {
    isValid = false;
}

if (testPattern(document.forms[0].project, /^PROJ\d{5}$/) == false) {
    isValid = false;
}

if (testPattern(document.forms[0].ssn, /^\d{3}-\d{2}-\d{4}$|\d{9}$/) == false) {
    isValid == false;
}

有没有办法简化一串像这样的if语句,如果它们都是相关的。我试着想出不同的方法来进行转换,但我认为这是不可能的。这可能是最优雅的解决方案?

EN

回答 3

Stack Overflow用户

发布于 2018-11-19 03:26:34

假设你首先有了isValid = true,你可以这样做:

代码语言:javascript
复制
var form = document.forms[0];
var props = ["lname", "fname", "address", "summary"];
var isValid = props.every(prop => testLength(form[prop]))
           && testPattern(form.account, /^ACT\d{6}$/)
           && testPattern(form.department, /^DEPT\d{3}$/)
           && testPattern(form.project, /^PROJ\d{5}$/) 
           && testPattern(form.ssn, /^\d{3}-\d{2}-\d{4}$|\d{9}$/); 

您还可以将预定义的数组方法应用于模式,如下所示:

代码语言:javascript
复制
var form = document.forms[0];
var props = ["lname", "fname", "address", "summary"];
var patts = [["account", /^ACT\d{6}$/], ["department", /^DEPT\d{3}$/],
             ["project", /^PROJ\d{5}$/], ["ssn", /^\d{3}-\d{2}-\d{4}$|\d{9}$/]];
var isValid = props.every(prop => testLength(form[prop]))
           && patts.every(([prop, regex]) => testPattern(form[prop], regex));

这个想法是你只需要初始化formpropspatts变量一次,而不是每次你需要执行验证,尽管这不是一个问题,如果你这样做。

票数 2
EN

Stack Overflow用户

发布于 2018-11-19 03:29:05

你可以使用一个数组作为回调,并使用boolean进行检查。

代码语言:javascript
复制
isValid = [
    testLength(document.forms[0].lname),
    testLength(document.forms[0].fname),
    testLength(document.forms[0].address),
    testLength(document.forms[0].summary),
    testPattern(document.forms[0].account, /^ACT\d{6}$/),
    testPattern(document.forms[0].department, /^DEPT\d{3}$/),
    testPattern(document.forms[0].project, /^PROJ\d{5}$/),
    testPattern(document.forms[0].ssn, /^\d{3}-\d{2}-\d{4}$|\d{9}$/)
].every(Boolean);

另一种方法是使用属性名称数组,并使用两个数组进行检查。

代码语言:javascript
复制
var keys = ['name', 'fname', 'address', 'summary'],
    patterns = [
        ['account', /^ACT\d{6}$/],
        ['department', /^DEPT\d{3}$/],
        ['project', /^PROJ\d{5}$/],
        ['ssn', /^\d{3}-\d{2}-\d{4}$|\d{9}$/]
    ],
    isValid = keys.every(k => testLength(document.forms[0][k]))
        && patterns.every((k, p) => testPattern(document.forms[0][k], p));
票数 2
EN

Stack Overflow用户

发布于 2018-11-19 03:34:48

假设每个值都是布尔值,您可以对布尔值执行逻辑&&

代码语言:javascript
复制
var isValid = testLength(document.forms[0].lname) && 
              testLength(document.forms[0].fname &&
              .....
              testPattern(document.forms[0].ssn, /^\d{3}-\d{2}-\d{4}$|\d{9}$/);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53364614

复制
相关文章

相似问题

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