1311 votes

Javascript: Déterminer si un tableau contient une valeur

j'ai besoin pour déterminer si une valeur existe dans un tableau à l'aide de javascript.

Je suis l'aide de la fonction suivante:

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] == obj) {
            return true;
        }
    }
    return false;
}

La fonction ci-dessus renvoie toujours false.

Le tableau des valeurs et de l'appel de fonction est comme ci-dessous

arrValues = ["Sam","Great", "Sample", "High"]
alert(arrValues.contains("Sam"));

S'il vous plaît suggérer quoi faire

999voto

eyelidlessness Points 28034
arrValues.indexOf('Sam') > -1

IE 8 et ci-dessous n'ont pas l' Array.prototype.indexOf méthode. Pour ces versions d'IE utiliser:

if(!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(needle) {
        for(var i = 0; i < this.length; i++) {
            if(this[i] === needle) {
                return i;
            }
        }
        return -1;
    };
}

Edit après une longue période de temps: Il est préférable de ne pas le patch prototype d'indigènes primitifs en JavaScript. Une meilleure façon:

var indexOf = function(needle) {
    if(typeof Array.prototype.indexOf === 'function') {
        indexOf = Array.prototype.indexOf;
    } else {
        indexOf = function(needle) {
            var i = -1, index = -1;

            for(i = 0; i < this.length; i++) {
                if(this[i] === needle) {
                    index = i;
                    break;
                }
            }

            return index;
        };
    }

    return indexOf.call(this, needle);
};

Vous pouvez l'utiliser comme ceci:

var myArray = [0,1,2],
    needle = 1,
    index = indexOf.call(myArray, needle); // 1

La fonction permet de détecter la présence d'un indigène indexOf méthode, une fois, puis écraser lui-même, soit avec la fonction native ou la cale.

994voto

codeape Points 38576

jQuery a une fonction d'utilité pour le présent:

$.inArray(value, array)

Retourne l'indice de la valeur dans le tableau. Retourne -1 si le tableau ne contient pas de valeur.

Voir également le tableau.contient(obj) en JavaScript

879voto

Gabriel Hurley Points 17079

C'est généralement ce que la méthode indexOf (). Vous diriez:

if (arrValues.indexOf('Sam') > -1) {return true;}
else {return false;}

135voto

ncabral Points 377

C'est presque toujours sûr d'utiliser une bibliothèque comme underscore.jstout simplement en raison de tous les problèmes avec la croix-navigateur compatibilités et effieciency.

L'efficacité, car vous pouvez être garantis que à un moment donné, un très populaire de la bibliothèque comme le soulignent sera la méthode la plus efficace de l'accomplissement d'une fonction d'utilité de ce genre.

_.contains([1, 2, 3], 3); // returns true

46voto

threed Points 2131

Une option qui tient compte de différents types dans le tableau (corrigé pour faire de la p locale à la boucle for):

Array.prototype.contains = function(k) {
  for(var i=0; i < this.length; i++){
    if(this[i] === k){
      return true;
    }
  }
  return false;
}

par exemple:

var list = ["one",2];

list.contains("one") // returns true
list.contains("2") // returns false
list.contains(2) // returns true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X