2016-12-03 15 views
-1

私は次のような非常に長い条件文を持っています: Javascriptで条件文を短縮するには?Javascriptで条件文を短縮する方法

var str = document.getElementsByClassName("label"); 
 
for(var i = 0; i<str.length; ++i){ 
 
if(str[i].innerHTML === "US" || str[i].innerHTML === "VN"|| str[i].innerHTML === "War"...){ 
 
str[i].style.display = "none";}}

+1

http://codereview.stackexchange.com/に適しているかもしれないが、if(['US'、 'VN'、 'War'、... ] .includes(str [i] .innerHTML)) ' – noahnu

答えて

0

使用しincludesはあなたがindexOf(..)>-1でそれを行うことができますES6

var values = ["US","VN","War"]; 
if (values.includes(str[i].innerHTML)){ 

} 

でサポートされて、含まれています:

var values = ["US","VN","War"]; 
if (values.indexOf(str[i].innerHTML)>-1){ 

} 
0

あなたがにarrayを使用することができますまたはincludes

注:includes ES6上で動作するサポートされているブラウザ

作業はスニペット:

var str = document.getElementsByClassName("label"); 
 
var options = ['US', 'VN', 'War']; 
 

 
for(var i = 0; i<str.length; ++i){ 
 
    var text = str[i].innerHTML; 
 
    if(options.indexOf(text) !== -1){ 
 
     str[i].style.display = "none"; 
 
    } 
 
}
<span class="label">US</span> 
 
<span class="label">USA</span>
正規表現を経由して

0

テストは、それはかなり短くなります:

if (/^(US|VN|War|etc)$/.test(str[i].innerHTML)) { 
文脈では

var str = document.getElementsByClassName("label"); 
var re = /^(US|VN|War|etc)$/; 
for (var i = 0; i < str.length; ++i) { 
    if (re.test(str[i].innerHTML)) { 
     str[i].style.display = "none"; 
    } 
} 

必要な場合は、正規表現にiフラグを追加することで、大文字と小文字を区別しないテストすることができます:

var re = /^(US|VN|War|etc)$/i; 
0

これは、すべての要素を選択することで、jqueryのを使用して行うことができますlabelのinnerHTMLが配列['US','VN']内にあることを確認してフィルタリングし、フィルタ条件を満たすものについてはCSSスタイルの表示を変更します。

$(".label").filter(function(){ 
     return ['US','VN'].includes(this.innerHTML); 
    }).css("display","none"); 
+1

@Jimはい、ありがとうございます。 – jacefarm

+0

@Jimあなたは正しいです - ありがとう:)そして、問題について少し考えてみると、jqueryはソリューションとして適していると思います。 –

関連する問題