2014-09-07 3 views
0

Мне нужно проверить, содержатся ли какие-либо конкретные значения в массиве. Я мог бы wirte как это:Поиск значений в массиве

if($.inArray('Z', arr) != -1){ 
    .. 
}else if($.inArray('A', arr) != -1){ 
    .. 
}else if($.inArray('G', arr) != -1){ 
    .. 
}else if($.inArray('T', arr) != -1){ 
...... 

Или короче так:

if($.inArray('Z', arr) != -1) || ($.inArray('A', arr) != -1) || ($.inArray('G', arr) != -1) ||($.inArray('T', arr) != -1) ... { 

Но есть еще более короткая версия моего кода? Благодаря

+0

Может быть, использовать петлю? –

+0

Возможно здесь: http://stackoverflow.com/questions/25658681/is-it-possible-to-convert-many-if-else-statements-to-a-dictionary-for-space-effi?noredirect=1# comment40095937_25658681. – loveNoHate

+1

Используйте 'in_array()' function ... – Anas

ответ

8

Вы можете использовать Array.prototype.some перебрать массив и проверить, если какой-либо элемент в массиве соответствует данный предикат:

var found = arr.some(function(s) { 
    return s.match(/^[ZAGT]$/); 
}); 

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

return s === 'Z' || s === 'A' || s === 'G' || s === 'T'; 

Приятная особенность .some является то, что он будет вырваться из своего внутреннего цикла, как только будет найден любой матч.

+0

Как браузер поддерживает some()? –

+0

@DesignbyAdrian все современные браузеры, и тривиально shimmable (код на опубликованной ссылке) в старых браузерах. – Alnitak

3

Вы можете добавить функцию прототипа и работать это с петлей:

Array.prototype.any = function(items) 
{ 
    for(var i = 0 ; i < items.length ; i++) 
    { 
     if(this.indexOf(items[i]) != -1) 
      return true; 
    } 

    return false; 
} 

var arr = [1,2,34,5,6]; 
console.log(arr.any([3,15])); // false 
console.log(arr.any([3,5])); // true 
+1

серьезно, добавив зависимость jQuery к функции прототипа 'Array' ?! – Alnitak

+0

@ Алнитак - Твоя правда. Я использовал его пример и взял там $ .inArray. –

0

Если вы пытаетесь найти элемент массива, чтобы проверить, что там вы можете использовать IndexOf Javascript функцию.

arr.indexOf("A")

Это, конечно, будет возвращать индекс элемента «A», если содержится и -1, если не содержится.

Возможно, я неправильно понял :)