检查一个布尔选项集

dje*_*lin 9 javascript node.js

嗯,这有点像hacky:

function b2n(boo) {
    return boo ? 1 : 0;
}

if(b2n(opt1) + b2n(opt2) + b2n(opt3) !== 1) {
    throw new Error("Exactly one option must be set");
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法在Javascript中执行此操作?使用任何一个

  • 更智能的布尔/数字处理
  • 偷偷摸摸的阵列或功能操作

等等.欢迎使用Javascript和Node解决方案.

在我的实际问题中,选项来自Node模块指令器,因此我不处理真正的布尔值,只是真正的虚假和虚假的东西.也可能有指挥官解决方案.

spu*_*dly 11

假设你有一系列选项,你可以这样做:

if(opts.filter(Boolean).length !== 1) {}
Run Code Online (Sandbox Code Playgroud)

在我看来,你应该有一个变量有三个可能的状态而不是......

var opt = 'a'; // (or 'b', or 'c')
Run Code Online (Sandbox Code Playgroud)

  • 为什么甚至打扰通过匿名函数?只需使用`if(opts.filter(Boolean).length!== 1){}`.或者甚至使用您的匿名函数,只返回"v"更有意义 (2认同)

Den*_*ret 6

你可以这样做 :

if ( !!opt1 + !!opt2 + !!opt3 !== 1 ) {
Run Code Online (Sandbox Code Playgroud)

它有效,因为

  • !!使一个布尔从任何值(true如果对象评估为trueif(value))
  • 添加布尔值,当你得到1true0false.

  • @spudly我不知道这些值是否是布尔值.这个问题并不清楚. (2认同)
  • @Paulpro是的,这是真的,但我不认为这是值得的.在我看来,与目标的语义差距太大了. (2认同)