我正在做一个分配,并且我很清楚if语句和switch语句。我有以下代码字符串:
python trity.py
如果它们都是相关的,是否有一种方法可以简化这样的if字符串。我试图思考可以进行切换的不同方式,但是认为这是不可能的。这可能是最优雅的解决方案吗?
答案 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));
这个想法是,form
,props
和patts
变量只初始化一次,而不是每次都需要执行验证,尽管如果您这样做就不会有问题做到了。
答案 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}$/);