Comment rechercher une chaîne dans un ensemble de chaînes

Après avoir cherché une réponse dans d'autres publications, j'ai senti que je devais demander cela. J'ai regardé Comment vérifier si un tableau comprend un objet en JavaScript? Et la meilleure façon de trouver si un élément est dans une matrice JavaScript? Et ne pouvait pas obtenir le code là-bas pour fonctionner.

Je capture un code html embed dans un tableau, de sorte que chaque élément est une ligne de code html.

par exemple:

i[0]='<param name=\"bgcolor\" value=\"#FFFFFF\" />' i[1]='<param name=\"width" value=\"640\" />' i[2]='<param name=\"height\" value=\"360\" />' i[3]='more html code' 

Je veux rechercher ce tableau et trouver la ligne où se trouve le mot «hauteur».

Donc, idéalement, j'aimerais écrire une fonction qui renvoie l'index de l'élément où 'height' apparaît.

Heureusement, il n'y a pas de doublons dans ce tableau, donc il n'y a qu'une seule occurrence.

Avec la recherche d'objet simple, j'obtiens des retours «faux».

Une idée?

C'est aussi simple que d'itérer le tableau et de chercher la regexp

 function searchStringInArray (str, strArray) { for (var j=0; j<strArray.length; j++) { if (strArray[j].match(str)) return j; } return -1; } 

Edit – make str comme argument pour fonctionner.

Extension de la fonction contient que vous avez associée à:

 containsRegex(a, regex){ for(var i = 0; i < a.length; i++) { if(a[i].search(regex) > -1){ return i; } } return -1; } 

Ensuite, vous appelez la fonction avec un ensemble de chaînes et un regex, dans votre cas pour rechercher la hauteur:

 containsRegex([ '<param name=\"bgcolor\" value=\"#FFFFFF\" />', 'sdafkdf' ], /height/) 

Vous pourriez également renvoyer l'index où la hauteur a été trouvée:

 containsRegex(a, regex){ for(var i = 0; i < a.length; i++) { int pos = a[i].search(regex); if(pos > -1){ return [i, pos]; } } return null; } 

Vous pouvez utiliser la fonction Array.prototype.find en javascript. Array Find MDN .

Donc, pour trouver une chaîne dans un ensemble de chaînes, le code devient très simple. De plus, comme implémentation du navigateur, il fournira de bonnes performances.

Ex.

 var strs = ['abc', 'def', 'ghi', 'jkl', 'mno']; var value = 'abc'; strs.find( function(str) { return str == value; } ); 

Il est plus rapide d' éviter d'utiliser des expressions régulières , si vous essayez simplement de trouver la première correspondance de la sous-chaîne dans un tableau de valeurs de chaîne. Vous pouvez ajouter votre propre fonction de recherche de tableau:

Code :

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

Utilisation :

 i.findFirstSubstring('height'); 

Retour :

-1 s'il n'est pas trouvé ou l'indice de tableau de l'occurrence de la première sous-chaîne s'il est trouvé (dans votre cas serait 2 )