实际上,我是javascript
的{{1}}的新手,
现在在这里,
disabled
我确实有这四个条件,
现在,我想要的是!props.updatedOption1 || !props.updatedOption2 || !props.updatedOption3 || !props.updatedOption4
,现在发生的是其中四个是if two are filled then it should be enabled
。
所以,我尝试了compulsary
条件,但是它变得太长了。
那么,有人可以建议我不同的解决方案吗?
答案 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;