验证至少4个值中的两个javascript

时间:2019-01-02 06:59:41

标签: javascript arrays object if-statement conditional

实际上,我是javascript的{​​{1}}的新手,

现在在这里,

disabled

我确实有这四个条件,

现在,我想要的是!props.updatedOption1 || !props.updatedOption2 || !props.updatedOption3 || !props.updatedOption4 ,现在发生的是其中四个是if two are filled then it should be enabled

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

那么,有人可以建议我不同的解决方案吗?

5 个答案:

答案 0 :(得分: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))) {
    // ...
}

答案 1 :(得分:1)

尝试一下

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

答案 2 :(得分:1)

您可以将它们放入数组,然后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!");
}

答案 3 :(得分:0)

您可以将bool的值视为int

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

我在这里使用<=2是因为您在示例中使用了!props.updatedOption

答案 4 :(得分:0)

如果updatedOption1-4是props的唯一属性,则可以执行以下操作:

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