Javascript 和多个参数 function和multipleexpr(){ 让逻辑平衡; 让我; 对于(i=0;iresult=v); 返回结果; } log(和multipleexpr(真、真、假、假)); log(和multipleexpr(true,true,1,2)); log(和multipleexpr(true,0,1,2))
我所期望的是执行以下代码:true&&true&&false&&false,它应该返回false 如何在js中实现这一点? 谢谢你需要Javascript 和多个参数 function和multipleexpr(){ 让逻辑平衡; 让我; 对于(i=0;iresult=v); 返回结果; } log(和multipleexpr(真、真、假、假)); log(和multipleexpr(true,true,1,2)); log(和multipleexpr(true,0,1,2)),javascript,function,Javascript,Function,我所期望的是执行以下代码:true&&true&&false&&false,它应该返回false 如何在js中实现这一点? 谢谢你需要 首先将logicalAnd设置为true 更新时使用logicalAnd,而不是使用arguments 最小的变化是: function和multipleexpr(){ 设logicalAnd=true;//*** 让我; 对于(i=0;ia&&b); log(和multipleexpr(真、真、假、假))您可以获取并返回最后一个值 这种方法返回了测试的实际结
logicalAnd
设置为true
logicalAnd
,而不是使用arguments
function和multipleexpr(){
设logicalAnd=true;//***
让我;
对于(i=0;i log(和multipleexpr(真、真、假、假))
对所有传递的参数使用Array.prototype.each
,检查它们是否都是真的
函数和多重expr(…a){
if(a.length==0)返回false;//未传递任何参数时返回false
返回a.every(布尔值);
}
log(和multipleexpr(真、真、假));//应该返回false
log(和multipleexpr(true,true,true));//应返回true
早期返回应使代码更高效、更短:
function andMultipleExpr() {
for (let i = 0; i < arguments.length; i++) {
if (!arguments[i]) {
return false;
}
}
return true;
}
function和multipleexpr(){
for(设i=0;i
我认为使用ES6Array.prototype.reduce
let和multipleexpr=(…args)=>args.reduce((a,b)=>a&&b);
log(和multipleexpr(真、真、假、假))代码>您可以获取并返回最后一个值
这种方法返回了测试的实际结果
通过使用该方法,对首次发现的falsy值进行短路。然后迭代停止
function和multipleexpr(…args){
var result;//对于空参数,任何返回值都是可配置的
args.every(v=>result=v);
返回结果;
}
log(和multipleexpr(真、真、假、假));
log(和multipleexpr(true,true,1,2));
log(和multipleexpr(true,0,1,2))代码>也许您想听听循环出了什么问题:
我只是在犹豫。我想确定我的想法是否得到了很好的阐述。如果有更好的方法,请建议。当使用Troothy值而不是布尔值时,输出应该是什么?i、 e.和multipleexpr(1,1,0,0)
或和multipleexpr(1,1,1)
以及和multipleexpr()
的输出应该是什么(无参数调用函数)?好吧,这些情况也需要考虑在内。:-)可以将e=>e===true
替换为Boolean
@nickzoum这将匹配所有truthy值,OP严格比较true
@Archie-不,他们在比较truthy/falsy。OP的代码中没有==
。不过,你的每一个想法都恰到好处。但是只要。每一个(e=>e)
都能完成这项工作。@T.J.Crowder-yes刚刚注意到了这一点。已经更新了答案。谢谢:)如果您添加了一个帮助函数:const isTrue=x=>x==true
(或x=>!!x
用于所有truthy值),您可以将解决方案压缩到返回参数中。every(isTrue)
。对我来说这看起来很漂亮。谢谢。这对我来说更有意义:-)在这种情况下,不需要在reduce语句中添加第二个参数,默认情况下获取第一个参数也会起作用。@nickzoum-只有当我们可以假设函数永远不会在没有参数的情况下被调用时,因为[]才会发生。reduce((a,b)=>a&&b)
抛出,使用every
like比reduce
好得多。更简单,而且短路。这是真的。但是,让我们现在就呆在这里,他想要的是合乎逻辑的,或者说,现在有了reduce,它只会变成&&to | |或者每一个
到一些
。更简单。还是短路。
for (i = 0; i < arguments.length; i++){
logicalAnd = arguments[i] && arguments[i+1];
}