逻辑运算的快捷方式
Shortcut for logical operation
我只是想知道,是否有逻辑运算符(&&
、||
)的快捷方式。就像我想做 i = i + 10
这样的事情,我可以做 i += 10
我搜索这个的原因是因为我有一个验证函数,它分为几个函数。以下是模拟:
function f1(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f2(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f3(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f4(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function validate(){
var valid = true;
valid = valid && f1();
valid = valid && f2();
valid = valid && f3();
valid = valid && f4();
console.log(valid);
}
validate();
我试过了&=
function f1(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f2(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f3(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f4(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function validate(){
var valid = true;
valid &= f1();
valid &= f2();
valid &= f3();
valid &= f4();
console.log(valid);
}
validate();
现在这可以工作了,因为 true & false = 0
和 0
是错误的,但这看起来更像是 hack,想知道是否有更好的方法来完成这样的任务?
注:
我试过valid = f1() && f2() && f3 && f4();
,但是在这种方法中,如果有任何函数returns false
,则不会执行后续函数。
编辑 1 - Nina 的建议
function f1(){
console.log("f1");
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f2(){
console.log("f2");
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f3(){
console.log("f3");
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f4(){
console.log("f4");
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function validate(){
var valid = true;
var validateFuncList = [f1,f2,f3,f4];
valid = validateFuncList.every(function (f) { return f(); });
console.log(valid);
}
validate();
现在这是一个很好的答案,但是如果有 returns false
,这将停止,这与 valid = f1() && f2() && f3 && f4();
相同
编辑 1
只是一个小更新。而不是做: valid = valid && func1()
做 valid = func1() && valid
。如果有效是 false
.
,第一种方法将不会调用 func1
一次验证它们以使其更短。
function validate(){
var result = f1() && f2() && f3() && f4();
console.log(result);
return result;
}
基本上你只检查下一个 f
函数如果前一个为真,这与你在代码中所做的相同,除了如果不需要它不会继续(如果其中之一前一个是假的)。
也许您使用数组。它调用所有函数。
function validate() {
return [f1(), f2(), f3()].every(Boolean);
}
或以数组作为参数
function validate(a) {
return a.every(Boolean);
}
// call
xy = validate([f1(), f2(), f3()]);
这是另一种更简洁的方法。按位与不短路,所以所有函数都会执行。
function validate(){
var valid = !!(f1() & f2() & f3() & f4());
console.log(valid);
}
当然 &
是按位与,而不是逻辑与,但只要您的函数 return 是布尔值,这就没有区别。最后,如果这很重要,您可以使用 !!
转换为布尔值。
我只是想知道,是否有逻辑运算符(&&
、||
)的快捷方式。就像我想做 i = i + 10
这样的事情,我可以做 i += 10
我搜索这个的原因是因为我有一个验证函数,它分为几个函数。以下是模拟:
function f1(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f2(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f3(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f4(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function validate(){
var valid = true;
valid = valid && f1();
valid = valid && f2();
valid = valid && f3();
valid = valid && f4();
console.log(valid);
}
validate();
我试过了&=
function f1(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f2(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f3(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f4(){
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function validate(){
var valid = true;
valid &= f1();
valid &= f2();
valid &= f3();
valid &= f4();
console.log(valid);
}
validate();
现在这可以工作了,因为 true & false = 0
和 0
是错误的,但这看起来更像是 hack,想知道是否有更好的方法来完成这样的任务?
注:
我试过valid = f1() && f2() && f3 && f4();
,但是在这种方法中,如果有任何函数returns false
,则不会执行后续函数。
编辑 1 - Nina 的建议
function f1(){
console.log("f1");
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f2(){
console.log("f2");
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f3(){
console.log("f3");
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function f4(){
console.log("f4");
return Math.ceil(Math.random()*10) %2 === 0? true:false
}
function validate(){
var valid = true;
var validateFuncList = [f1,f2,f3,f4];
valid = validateFuncList.every(function (f) { return f(); });
console.log(valid);
}
validate();
现在这是一个很好的答案,但是如果有 returns false
,这将停止,这与 valid = f1() && f2() && f3 && f4();
编辑 1
只是一个小更新。而不是做: valid = valid && func1()
做 valid = func1() && valid
。如果有效是 false
.
func1
一次验证它们以使其更短。
function validate(){
var result = f1() && f2() && f3() && f4();
console.log(result);
return result;
}
基本上你只检查下一个 f
函数如果前一个为真,这与你在代码中所做的相同,除了如果不需要它不会继续(如果其中之一前一个是假的)。
也许您使用数组。它调用所有函数。
function validate() {
return [f1(), f2(), f3()].every(Boolean);
}
或以数组作为参数
function validate(a) {
return a.every(Boolean);
}
// call
xy = validate([f1(), f2(), f3()]);
这是另一种更简洁的方法。按位与不短路,所以所有函数都会执行。
function validate(){
var valid = !!(f1() & f2() & f3() & f4());
console.log(valid);
}
当然 &
是按位与,而不是逻辑与,但只要您的函数 return 是布尔值,这就没有区别。最后,如果这很重要,您可以使用 !!
转换为布尔值。