¿Cómo encontrar si un array contiene una cadena específica en JavaScript/jQuery?

¿Puede alguien decirme cómo detectar si `"specialword"aparece en un array? Ejemplo:

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

jQuery ofrece $.inArray:

Tenga en cuenta que inArray devuelve el índice del elemento encontrado, por lo que 0 indica que el elemento es el primero de la matriz. El -1 indica que el elemento no fue encontrado.

begin snippet: js hide: true console: true babel: false -->

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>

...fin del fragmento..;


Edición 3,5 años después

$.inArray es efectivamente una envoltura para Array.prototype.indexOf en los navegadores que lo soportan (casi todos hoy en día), mientras que proporciona un shim en aquellos que no lo hacen. Es esencialmente equivalente a añadir un shim a Array.prototype, que es una forma más idiomática/JSish de hacer las cosas. MDN proporciona dicho código. Hoy en día yo tomaría esta opción, en lugar de usar el wrapper de jQuery.

begin snippet: js hide: true console: true babel: false -->

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

var foundPresent = categoriesPresent.indexOf('specialword') > -1;
var foundNotPresent = categoriesNotPresent.indexOf('specialword') > -1;

console.log(foundPresent, foundNotPresent); // true false

Editar otros 3 años después

Dios, ¿6,5 años?

La mejor opción para esto en el Javascript moderno es Array.prototype.includes:

var found = categories.includes('specialword');

Sin comparaciones y sin resultados confusos de -1. Hace lo que queremos: devuelve true o false. Para los navegadores más antiguos es polyfillable usando el código en MDN.

begin snippet: js hide: true console: true babel: false -->

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

var foundPresent = categoriesPresent.includes('specialword');
var foundNotPresent = categoriesNotPresent.includes('specialword');

console.log(foundPresent, foundNotPresent); // true false
Comentarios (22)

Aquí tienes:

$.inArray('specialword', arr)

Esta función devuelve un entero positivo (el índice de la matriz del valor dado), o -1 si el valor dado no se encontró en la matriz.

Demostración en vivo: http://jsfiddle.net/simevidas/5Gdfc/

Probablemente quieras usar esto así:

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

Puedes utilizar un bucle for:

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