0

おそらく私は何かを見逃しましたが、次のようなものを書くためのより良い/より簡潔な方法はありますか:

var a=1,
    b=2,
    c=3;
if(a===1 && b===1 && c===1){ do something };

また

if(a===1 || b===1 || c===1){ do something };

私はコードを小さく保とうとしているので、私が遭遇したページで提案されているような配列の反復などを探していません。次のようなものがあると思います(少なくとも最初の例ではすべて同じです)。

if(a=b=c===1){ do something? };

ありがとう!

4

3 に答える 3

4

関数型のアプローチを採用して、単純な比較関数ジェネレーターを作成できます。

function eq(val) {
    return function(x) {
        return x === val
    }
}

そして、次のように使用.everyします&&

if ([a,b,c].every(eq(1))) {
    // all were equal
}

または次の目的で使用.someします||

if ([a,b,c].some(eq(1))) {
    // at least one was equal
}

条件の結果を受け取る関数と、条件が真の場合に呼び出す関数を作成することもできます。

function when(cond, fn) {
    if (cond)
        fn.call.apply(fn, [].slice.call(arguments, 2))
}

そして、体を関数にカプセル化ifします...

function doIt(arg1, arg2) {
    console.log("doing it!")
    console.log(this, arg1, arg2)
}

次に、次のように使用します。

when([a,b,c].every(eq(1)), doIt, null, "foo", "bar")

3 番目の引数はコールバックwhenの値を設定しthis、後続の引数は引数としてコールバックに渡されます。

于 2013-05-25T18:06:55.043 に答える
2

いいえ、ありません。個別に確認する必要があります。JavaScript には、あなたがしようとしていることに対する演算子がありません。

あなたif(a=b=c===1){ ...(これは単なる例だと思います)は、 andを(if )または(そうでない場合)に設定 し、のみに基づいて分岐します。abtruec===1falsec===1

つまり、その特定のケースでは、いくつかの数学的なアプローチがありますが、一般的なケースではありません.

于 2013-05-25T17:07:04.607 に答える