Como descobrir se uma matriz contém uma string específica em JavaScript / jQuery?

Alguém pode me dizer como detectar se "specialword" aparece em uma matriz? Exemplo:

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

Você realmente não precisa do jQuery para isso.

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

ou

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

Vale a pena notar que array.indexOf(..) não é suportado no IE <9 , mas a função indexOf(…) do jQuery funcionará mesmo para as versões mais antigas.

O jQuery oferece $.inArray :

Note que inArray retorna o índice do elemento encontrado, então 0 indica que o elemento é o primeiro na matriz. -1 indica que o elemento não foi encontrado.

 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 
  

Aqui está:

 $.inArray('specialword', arr) 

Esta function retorna um inteiro positivo (o índice da matriz do valor dado) ou -1 se o valor fornecido não foi encontrado na matriz.

Demonstração ao vivo: http://jsfiddle.net/simevidas/5Gdfc/

Você provavelmente quer usar isto da seguinte forma:

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

Você pode usar um loop for :

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

Eu não gosto de $.inArray(..) , é o tipo de solução feia e jQuery que as pessoas mais sensatas não tolerariam. Aqui está um trecho que adiciona um simples método contains(str) ao seu arsenal:

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

Da mesma forma, você poderia envolver $.inArray em uma extensão:

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