Javascript 和多个参数 function和multipleexpr(){ 让逻辑平衡; 让我; 对于(i=0;iresult=v); 返回结果; } log(和multipleexpr(真、真、假、假)); log(和multipleexpr(true,true,1,2)); log(和multipleexpr(true,0,1,2))

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(真、真、假、假))您可以获取并返回最后一个值 这种方法返回了测试的实际结

我所期望的是执行以下代码:true&&true&&false&&false,它应该返回false

如何在js中实现这一点? 谢谢

你需要

  • 首先将
    logicalAnd
    设置为
    true

  • 更新时使用
    logicalAnd
    ,而不是使用
    arguments

  • 最小的变化是:

    function和multipleexpr(){
    设logicalAnd=true;//***
    让我;
    对于(i=0;ilog(和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
    我认为使用ES6
    Array.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];
    }