【问题标题】:Validations for the at least two from 4 values javascript验证 4 个值中的至少两个 javascript
【发布时间】:2019-05-28 20:54:07
【问题描述】:

其实我是javascript的新手,我在这里用过disabled

现在在这,

!props.updatedOption1 || !props.updatedOption2 || !props.updatedOption3 || !props.updatedOption4 

我确实有这四个条件,

现在,我想要的是 if two are filled then it should be enabled,现在发生的情况是其中四个是 compulsary

所以,我尝试了 && 条件,但它变得太长了。

那么,谁能给我建议不同的解决方案?

【问题讨论】:

    标签: javascript arrays object if-statement conditional


    【解决方案1】:

    您可以使用Array#reduce 计算选项。

    var options = ['updatedOption1', 'updatedOption2', 'updatedOption3', 'updatedOption4']
    
    
    if (options.reduce((s, k) => s + !props[k], 0) >= 2) {
        // ...
    }
    

    或者,如果条件匹配,您可以使用闭包进行计数并提前退出

    var options = ['updatedOption1', 'updatedOption2', 'updatedOption3', 'updatedOption4']
    
    
    if (options.some((c => k => !props[k] && !--c)(2))) {
        // ...
    }
    

    【讨论】:

      【解决方案2】:

      试试这个

      ['updatedOption1', 'updatedOption2', 'updatedOption3', 'updatedOption4'].filter((option) => 
      props[option]).length >= 2;
      

      【讨论】:

        【解决方案3】:

        你可以把它们做成一个数组,然后filter 取出假值,看看结果数组的长度是否为二或更长。由于下面有两个选项是true,因此它的评估结果为已启用:

        var props = {
          updatedOption1: false,
          updatedOption2: true,
          updatedOption3: true,
          updatedOption4: false
        };
        
        var options = [props.updatedOption1, props.updatedOption2, props.updatedOption3, props.updatedOption4];
        options = options.filter(e => e);
        if (options.length >= 2) {
          console.log("Enabled!");
        } else {
          console.log("Disabled!");
        }

        【讨论】:

          【解决方案4】:

          您可以将bool 值视为int

          if((props.updatedOption1 + props.updatedOption2 + props.updatedOption3 + props.updatedOption4) <= 2)
          {
            //...
          }
          

          我在这里使用了&lt;=2,因为您在示例中使用了!props.updatedOption

          【讨论】:

            【解决方案5】:

            如果 updatedOption1-4 是 props 的唯一属性,那么您可以这样做:

            const isValid = Object.values(props).filter(p => p).length >= 2;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-07-15
              • 2016-09-11
              • 1970-01-01
              • 1970-01-01
              • 2012-04-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多