2010-08-06 2 views
4

Ума пошел пустым во второй половине дня и не могу за жизнь мне понять, правильный способ сделать это:JavaScript Если заявление, глядя через массив

if(i!="3" && i!="4" && i!="5" && i!="6" && i!="7" && i!="8" && i!="9" && i!="2" && i!="19" && i!="18" && i!="60" && i!="61" && i!="50" && i!="49" && i!="79" && i!="78" && i!="81" && i!="82" && i!="80" && i!="70" && i!="90" && i!="91" && i!="92" && i!="93" && i!="94"){ 

//do stuff 

} 

все эти цифры должны быть в массиве, то я могу проверить, не «i» не равно ни одному из них.

спасибо>. <

+0

см http://stackoverflow.com/questions/237104/javascript-array-containsobj – fearofawhackplanet

+0

возможно дубликат [Лучший способ найти элемент в массиве JavaScript? ] (http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript-array) –

+0

@fearofawhackplanet, вы тоже правы. Я также отметил эту функцию как обман. –

ответ

11
var a = [3,4,5,6,7,8,9]; 

if (a.indexOf(2) == -1) { 
    // do stuff 
} 

indexOf возвращает -1 если номер не найден. Он возвращает что-то отличное от -1, если оно найдено. Измените свою логику, если хотите.

Оберните цифры в кавычки, если вам нужны строки (a = ['1','2']). Я не знаю, с чем вы имеете дело, поэтому я сделал их номерами.

IE и другие неясные/старые браузеры будут нуждаться в indexOf метод:

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(elt /*, from*/) 
    { 
    var len = this.length >>> 0; 

    var from = Number(arguments[1]) || 0; 
    from = (from < 0) 
     ? Math.ceil(from) 
     : Math.floor(from); 
    if (from < 0) 
     from += len; 

    for (; from < len; from++) 
    { 
     if (from in this && 
      this[from] === elt) 
     return from; 
    } 
    return -1; 
    }; 
} 
+1

видя это просто заставляет меня любить jQuery еще больше. – fearofawhackplanet

+0

Я тоже, спасибо, что работает отлично –

0

Это решение является кросс-браузер:

var valid = true; 
var cantbe = [3, 4, 5]; // Fill in all your values 
for (var j in cantbe) 
    if (typeof cantbe[j] === "number" && i == cantbe[j]){ 
     valid = false; 
     break; 
    } 

valid будет true если i не является «плохим ', false в противном случае.

+3

Это очень плохая практика, чтобы использовать 'for ... in' на массивах. –

+0

Я бы не назвал это плохой практикой, пока вы знаете, что делаете. Я добавил чек: 'typeof cantbe [j] ===" number "'. –

+0

нет, это все еще плохая практика. – lincolnk

2

Мой разум сделал это решение:

function not(dat, arr) { //"not" function 
for(var i=0;i<arr.length;i++) { 
    if(arr[i] == dat){return false;} 
} 
return true; 
} 

var check = [2,3,4,5,6,7,8,9,18,19,49,50,60,61,70,78,79,80,81,82,90,91,92,93,94]; //numbers 

if(not(i, check)) { 
//do stuff 
} 
+0

Одним из преимуществ использования 'indexOf' является то, что он уже встроен в большинство современных браузеров. –