web-dev-qa-db-fra.com

Jquery, vérifiant si une valeur existe dans un tableau ou non

Je crois que cette question sera assez facile pour ceux qui ont joué avec Java script/jquery.

var arr = new Array();

$.map(arr, function() {
 if (this.id == productID) {
   this.price = productPrice;
 }else {
  arr.Push({id: productID, price: productPrice})
 }
}

Je suppose que le code ci-dessus explique ce que je veux de manière très simple. J'imagine que cette $ .map fonctionnerait comme ça, mais malheureusement, je n'ai pas pu obtenir de résultats avec ça.

Quelle est la manière la plus simple et élégante de le faire? Est-ce que je passe en revue tous les tableaux pour savoir si la valeur d'une clé est présente ou non?

Est-ce que Jquery a quelque chose comme isset($array['key'])?

EDIT

J'ai essayé d'utiliser inArray mais cela continue d'ajouter des objets à array même s'il y a une correspondance.

if ( $.inArray(productID, arr) > -1) {
   var number = $.inArray(productID, arr);
   orderInfo[number].price = parseFloat(productPrice);
}else {
   orderInfo.Push({id:productID, price:parseFloat(productPrice)});
}
57
Revenant

Si vous voulez le faire en utilisant .map() ou si vous voulez juste savoir comment ça marche, vous pouvez le faire comme ceci:

var added=false;
$.map(arr, function(elementOfArray, indexInArray) {
 if (elementOfArray.id == productID) {
   elementOfArray.price = productPrice;
   added = true;
 }
}
if (!added) {
  arr.Push({id: productID, price: productPrice})
}

La fonction gère chaque élément séparément. La .inArray() proposée dans d'autres réponses est probablement la manière la plus efficace de le faire.

22
Lycha

http://api.jquery.com/jQuery.inArray/

if ($.inArray('example', myArray) != -1)
{
  // found it
}
214
jbabey

jQuery a la fonction inArray:

http://api.jquery.com/jQuery.inArray/

19
BZink
    if ($.inArray('yourElement', yourArray) > -1)
    {
        //yourElement in yourArray
        //code here

    }

Référence: Jquery Array

La méthode $ .inArray () est similaire à la méthode native .indexOf () de JavaScript en ce sens qu'elle renvoie -1 lorsqu'elle ne trouve pas de correspondance. Si le premier élément du tableau correspond à la valeur, $ .inArray () renvoie 0.

15
Hueston Rido

Essayez jQuery.inArray()

Voici un lien jsfiddle utilisant le même code: http://jsfiddle.net/yrshaikh/SUKn2/

La méthode $ .inArray () est similaire à la méthode native .indexOf () de JavaScript en ce sens qu'elle renvoie -1 lorsqu'elle ne trouve pas de correspondance. Si le premier élément du tableau correspond à la valeur, $ .inArray () renvoie 0

Exemple de code :

<html>
   <head>
      <style>
         div { color:blue; }
         span { color:red; }
  </style>
      <script src="http://code.jquery.com/jquery-latest.js"></script>
   </head>
   <body>    
      <div>"John" found at <span></span></div>
      <div>4 found at <span></span></div>
      <div>"Karl" not found, so <span></span></div>
      <div>
         "Pete" is in the array, but not at or after index 2, so <span></span>
      </div>
      <script>
         var arr = [ 4, "Pete", 8, "John" ];
         var $spans = $("span");
         $spans.eq(0).text(jQuery.inArray("John", arr));
         $spans.eq(1).text(jQuery.inArray(4, arr));
         $spans.eq(2).text(jQuery.inArray("Karl", arr));
         $spans.eq(3).text(jQuery.inArray("Pete", arr, 2));
      </script>  
   </body>
</html>

Sortie:

 "John" trouvé à 3 
 4 trouvé à 0 
 "Karl" non trouvé, donc -1 
 "Pete" est dans le tableau, mais pas à ou après l'indice 2, donc -1 
7
Yasser