Comprobar si un elemento está presente en un array

La función que estoy utilizando ahora para comprobar esto es la siguiente:

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

Funciona. Lo que estoy buscando es si hay una mejor manera de hacer esto.

Código:

function isInArray(value, array) {
  return array.indexOf(value) > -1;
}

Ejecución:

isInArray(1, [1,2,3]); // true

Actualización (2017):

En los navegadores modernos que siguen el estándar ECMAScript 2016 (ES7), se puede utilizar la función Array.prototype.includes, que facilita la comprobación de la presencia de un elemento en un array:

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

const array = [1, 2, 3];
const value = 1;
const isInArray = array.includes(value);
console.log(isInArray); // true
Comentarios (7)

Sólo tiene que utilizar indexOf:

haystack.indexOf(needle) >= 0

Si quiere dar soporte a los antiguos exploradores de Internet (< IE9), tendrá que incluir su código actual como una solución.

A menos que su lista esté ordenada, necesita comparar cada valor con la aguja. Por lo tanto, tanto tu solución como indexOf tendrán que ejecutar n/2 comparaciones en promedio. Sin embargo, como indexOf es un método incorporado, puede utilizar optimizaciones adicionales y será ligeramente más rápido en la práctica. Ten en cuenta que a menos que tu aplicación busque en listas con extrema frecuencia (digamos 1000 veces por segundo) o las listas sean enormes (digamos 100k entradas), la diferencia de velocidad no importará.

Comentarios (6)

Puedes utilizar la función _contains de la biblioteca underscore.js para conseguirlo:

if (_.contains(haystack, needle)) {
  console.log("Needle found.");
};
Comentarios (2)