简化If语句

时间:2018-11-18 19:23:21

标签: javascript if-statement switch-statement

我正在做一个分配,并且我很清楚if语句和switch语句。我有以下代码字符串:

python trity.py

如果它们都是相关的,是否有一种方法可以简化这样的if字符串。我试图思考可以进行切换的不同方式,但是认为这是不可能的。这可能是最优雅的解决方案吗?

3 个答案:

答案 0 :(得分:2)

假设您首先拥有isValid = true,则可以这样做:

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}$/); 

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

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变量只初始化一次,而不是每次都需要执行验证,尽管如果您这样做就不会有问题做到了。

答案 1 :(得分:2)

您可以获取一个数组,并以boolean作为回调进行检查。

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);

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

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 :(得分:0)

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

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}$/);