2016-12-03 2 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 поддерживается в ES6

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

} 

Вы можете сделать это с indexOf(..)>-1:

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

} 
0

Вы можете использовать array с indexOf или 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, затем отфильтровывая их, проверяя, что их внутреннийHTML находится внутри массива ['US','VN'], и для всех, удовлетворяющих условию фильтра, мы изменяем отображение стиля css

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

@Jim Да, спасибо. – jacefarm

+0

@ Jim вы правы - спасибо :) и подумав о проблеме немного больше, я думаю, что jquery лучше подходит для решения. –

Смежные вопросы