Как найти массив, содержащий определенную строку в JavaScript/jQuery?

Может ли кто-нибудь сказать мне, как определить, появляется ли "specialword" в массиве? Пример:

categories: [
    "specialword"
    "word1"
    "word2"
]

Ответ 1

Вам действительно не нужен jQuery для этого.

var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);

или

function arrayContains(needle, arrhaystack)
{
    return (arrhaystack.indexOf(needle) > -1);
}

Стоит отметить, что array.indexOf(..) не поддерживается в IE < 9, но функция jQuery indexOf(...) будет работать даже для старых версий.

Ответ 2

jQuery предлагает $.inArray:

Обратите внимание, что inArray возвращает индекс найденного элемента, поэтому 0 указывает, что элемент является первым в массиве. -1 указывает, что элемент не найден.

var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];

var foundPresent = $.inArray('specialword', categoriesPresent) > -1;
var foundNotPresent = $.inArray('specialword', categoriesNotPresent) > -1;

console.log(foundPresent, foundNotPresent); // true false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Ответ 3

Здесь вы идете:

$.inArray('specialword', arr)

Эта функция возвращает положительное целое число (индекс массива заданного значения) или -1, если данное значение не было найдено в массиве.

Живая демонстрация: http://jsfiddle.net/simevidas/5Gdfc/

Вероятно, вы хотите использовать это так:

if ( $.inArray('specialword', arr) > -1 ) {
    // the value is in the array
}

Ответ 4

Вы можете использовать цикл for:

var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] === "specialword") {
    found = true;
    break;
  }
}

Ответ 5

Мне не нравится $.inArray(..), это своего рода уродливое, jQuery-ish решение, которое большинство здравомыслящих людей не потерпит. Вот фрагмент, который добавляет простой contains(str) метод в ваш арсенал:

$.fn.contains = function (target) {
  var result = null;
  $(this).each(function (index, item) {
    if (item === target) {
      result = item;
    }
  });
  return result ? result : false;
}

Аналогично, вы можете обернуть $.inArray в расширение:

$.fn.contains = function (target) {
  return ($.inArray(target, this) > -1);
}