2017-03-17 16 views
0

javascriptステートメントをさらに簡略化できますか?必要なのは、入力が負の場合は、ブロックif文内で文を実行する必要があるということです。私は< 0複数回を避け、一度だけjavascript内の単一のifステートメント内で複数のOR条件を確認する方が良い

if (Number(cash.value) < 0 || Number(cheque.value) < 0 || Number(charge.value) < 0 || Number(card.value) < 0) { 
doSomething(); 
} 

を使用することができれば、私はこのロジックに

if ((Number(Cash.value) || Number(Cheque.value) || Number(Charge.value) || Number(Card.value)) < 0) 

を簡略化しますが、それは動作しませんし、要件を満たしていない疑問に思って。上記のロジックは動作しますが、< 0ロジックの重複があり

答えて

2

を使用することができますあなたは、たとえば​​のために取り外し簡素化することができます - +記号は、実際の数に番号を保持する文字列を点灯し、我々はまだ速くを使用することができますロジックオペランド:二行目の問題点については

if (+cash.value < 0 || +cheque.value < 0 || +charge.value < 0 || +card.value) < 0) { 
    doSomething(); 
} 

-

(JavaScriptは大文字と小文字が区別されるように、他に可能な入力ミスから)このラインが動作しない理由:

if ((Number(Cash.value) || Number(Cheque.value) || Number(Charge.value) || Number(Card.value)) < 0) 

このNumber(Cash.value)はブール値、すなわち、に変換されることです。値が0の場合はfalse、それ以外の場合はtrueに変換されます。したがって、数字が0、プラスまたはマイナスでない場合は、意図したとおりに通過する最後のテストを除いて、通過します。各値は個別にテストする必要があります。

アドバイス:並行して多数の値をチェックする必要がある場合を除き、アレイ(ES6以前であるかどうかにかかわらず)を使用しないでください。これはブールチェックを直接行うよりもはるかに遅く、特にJavaScriptを解析したりJavaScriptを最適化していない古いブラウザでは、

+1

かなりクールです!このショートカットを知らなかった! – surajck

+0

@ K3N。例えばIE 7.0のような古いIE版では動作しますか? – 3355307

+0

@rajaはい、これはどんなブラウザでも動作します。 – K3N

6

あなたはES6

var numbers = [11, 12, -1,-7]; 
 

 
if(numbers.some(value => value < 0)){ 
 
    console.log('Found !!!'); 
 
}

で働いている、例えばこの

var numbers = [Cash.value, Cheque.value, Charge.value, Card.value]; 

if(numbers.some(value => Number(value) < 0)){ 
    doSomething(); 
} 

のようにやろうとすることができます

IE 9、あなたが関数を記述し、

function anyNegative(numbers){ 
 
    for(var i = 0; i < numbers.length; i++){ 
 
    if(numbers[i] < 0){ 
 
     return true; 
 
    } 
 
    } 
 
    
 
    return false; 
 
} 
 

 
var numbers = [11, 12, -1,-7]; 
 

 
if(anyNegative(numbers)){ 
 
    console.log('Found !!!'); 
 
}

+0

IEの古いバージョン、例えばIE 7以上で動作するでしょうか。 – 3355307

+0

いいえ、IE 9およびそれ以降のバージョン。 –

+0

@ 3355307が更新されました。正しいとマークして他のユーザーを簡単に見つけるのに役立ちます –

0

方法について:

if([Cash,Cheque,Charge,Card].some(obj => Number(obj.value) < 0)) { 
    doSomething(); 
} 
0

それとも、より多くの場所でそれを必要とする場合には、機能としてそれを持っています。それは、私は本当に、ないと思います

https://jsfiddle.net/2L1L7ncj/

function isAnyArgumentNegative(){ 
    var args = Array.prototype.slice.call(arguments); 
    return args.some(function(a){ 
    return Number(a) < 0; 
    }); 
} 
0

を確認するために、入力のN数をとります。

最後のものを除いてすべての値を真実とし、最後に負の値のみをチェックするので、2番目のステートメントは機能しません。

function isNegative(value) { 
    return Number(value) < 0; 
} 

をそしてあなたのif文であることを使用する:あなたは、コードを読みやすくしたい場合は

、あなたはヘルパー関数が追加される場合があります。

技術的に、あなたはこのように機能を作ることができる:

function atLeastOneNegative() { 
    for (var i = 0; i < arguments.length; i++) { 
    if (Number(i) < 0) return true; 
} 

    return false; 
} 

しかし、私は最初のオプションは、よりよいコードを与えるだろうと思います。

関連する問題