2012-09-27 3 views
146

У меня есть строковый массив и одна строка. Я хотел бы проверить эту строку на значения массива и применить условие к результату - если массив содержит строку do «A», в противном случае «B».Как проверить, содержит ли строковый массив одну строку в JavaScript?

Как я могу это сделать?

+1

Проверьте это: http://stackoverflow.com/questions/237104/array -containsobj-in-javascript –

+1

indexOf [MDN Docs] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf) – epascarello

+0

перебирать массив и сравнивать по одному! – SachinGutte

ответ

277

Существует indexOf метод, чтобы все массивы (за исключением Internet Explorer 8 и ниже), который возвращает индекс элемента в массиве, или -1, если это не в массиве:

if (yourArray.indexOf("someString") > -1) { 
    //In the array! 
} else { 
    //Not in the array 
} 

Если вам нужно поддерживать старые браузеры IE, вы можете полилизовать этот метод, используя код в the MDN article.

4

Это будет делать это для вас:

function inArray(needle, haystack) { 
    var length = haystack.length; 
    for(var i = 0; i < length; i++) { 
     if(haystack[i] == needle) 
      return true; 
    } 
    return false; 
} 

Я нашел его в Stack Overflow вопрос JavaScript equivalent of PHP's in_array().

+3

И вы заново изобрели indexOf, поддерживаемый современными браузерами. – epascarello

+7

... который не поддерживается IE до IE9 - многие люди, включая меня, должны разрабатывать для IE8 (и, к сожалению, IE7 тоже большую часть времени). Разумеется, метод прототипа, создающий функцию indexOf, является предпочтительным решением для того, что я написал – ollie

15
var stringArray = ["String1", "String2", "String3"]; 

return (stringArray.indexOf(searchStr) > -1) 
40

Вы можете использовать метод indexOf и "расширить" класс массива с помощью метода contains, как это:

Array.prototype.contains = function(element){ 
    return this.indexOf(element) > -1; 
}; 

со следующими результатами:

["A", "B", "C"].contains("A") равна true

["A", "B", "C"].contains("D") соответствует false

+0

Хороший ответ, но стоит упомянуть проблемы совместимости для старых версий IE при использовании indexOf. –

+11

Никто не заботится о том, что даже Microsoft: D – andygoestohollywood

+0

@andygoestohollywood К сожалению, некоторые компании по-прежнему используют IE. Просто потому, что некоторые компании находятся в каменном веке, не означает, что вы должны сбросить 9% вашего рынка. –

8

Создать этот прототип функции:

Array.prototype.contains = function (needle) { 
    for (i in this) { 
     if (this[i] == needle) return true; 
    } 
    return false; 
} 

, а затем вы можете использовать следующий код для поиска в массиве х

if (x.contains('searchedString')) { 
    // do a 
} 
else 
{ 
     // do b 
} 
+1

Читать [Почему используется «для ... в» с итерацией массива такая плохая идея?] (Https://stackoverflow.com/questions/500504/why-is-using- в-в-с-массив итерационного-такой-а-плохой-идеи) – Bergi

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