Comment trouver un item dans un tableau (array) JavaScript ?

Il arrive souvent que dans un développement le programmeur possède différentes valeurs regroupées dans un tableau et qu'il cherche à savoir si une valeur se trouve bien dans ce tableau.

Il arrive souvent que dans un développement le programmeur possède différentes valeurs regroupées dans un tableau et qu'il cherche à savoir si une valeur se trouve bien dans ce tableau.

Pour développer une méthode qui indique si une valeur est située dans un tableau, il est possible de se baser sur la méthode indexOf() de la classe Array(). Elle retourne la position de l'élément dans le tableau s'il est présent, -1 sinon.
function include(tableau, objet)

{
 return (tableau.indexOf(objet) != -1);
}

Cette méthode ne fonctionne pas avec les versions d'Internet Explorer antérieures à la version 9. Si vous souhaitez que votre code fonctionne avec ces versions, il faut développer votre propre méthode. On peut tout d'abord réécrire la méthode indexOf de la classe Array. Il est alors nécessaire de réaliser un test pour savoir si cette méthode n'existe pas déjà. Si ce n'est pas le cas, alors on peut réécrire la méthode. Il suffit de parcourir le tableau et de comparer chaque élément à l'élément recherché.

On peut également ajouter le traitement du paramètre fromIndex, qui permet de définir à partir de quelle position la recherche dans le tableau va être effectuée.

if (!Array.prototype.indexOf) {
 Array.prototype.indexOf = function (obj, fromIndex) {
 if (fromIndex == null) {
 fromIndex = 0;
 } else if (fromIndex < 0) {
 fromIndex = Math.max(0, this.length + fromIndex);
 }
 for (var i = fromIndex, j = this.length; i < j; i++) {
 if (this[i] === obj)
 return i;
 }
 return -1;
 };
}

On peut également combiner les deux solutions, c'est-à-dire effectuer un test avec la méthode indexOf(), et rechercher l'élément dans le tableau si la méthode n'existe pas, en retournant true si on a trouvé l'élément, false sinon.

Array.prototype.hasObject = (
!Array.indexOf ? function (o)
{
var l = this.length + 1;
while (l -= 1)
{
if (this[l - 1] === o)
{
return true;
}
}
return false;
} : function (o)
{
return (this.indexOf(o) !== -1);
}
);

JavaScript