【问题标题】: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)
{
//...
}
我在这里使用了<=2,因为您在示例中使用了!props.updatedOption。
【解决方案5】:
如果 updatedOption1-4 是 props 的唯一属性,那么您可以这样做:
const isValid = Object.values(props).filter(p => p).length >= 2;