Après avoir cherché une réponse dans d'autres messages, j'ai senti que je devais poser cette question. J'ai regardé Comment puis-je vérifier si un tableau comprend un objet en JavaScript? et Meilleur moyen de savoir si un élément est dans un tableau JavaScript? et n'a pas pu obtenir le code là pour travailler.
Je suis en train de capturer un code html intégré 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 retourne l'index de l'élément où "height" apparaît.
Heureusement, il n'y a pas de doublons dans ce tableau, il n'y a donc 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 rechercher l'expression rationnelle
function searchStringInArray (str, strArray) {
for (var j=0; j<strArray.length; j++) {
if (strArray[j].match(str)) return j;
}
return -1;
}
Edit - fabrique str
comme argument de fonction.
Extension de la fonction contient que vous avez lié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 tableau de chaînes et une expression rationnelle, dans votre cas, recherchez la hauteur:
containsRegex([ '<param name=\"bgcolor\" value=\"#FFFFFF\" />', 'sdafkdf' ], /height/)
Vous pouvez é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. Recherche de tableau MDN .
Donc, pour trouver une chaîne dans un tableau de chaînes, le code devient très simple. De plus, en tant que navigateur, il fournira de bonnes performances.
Ex.
var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find(
function(str) {
return str == value;
}
);
ou en utilisant l'expression lambda, il deviendra beaucoup plus court
var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find((str) => str === value);
Il est plus rapide de évitez d'utiliser des expressions régulières , si vous essayez simplement de trouver la première correspondance de 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');
Retourne :
-1 s'il n'est pas trouvé ou l'index de tableau de la première occurrence de sous-chaîne s'il est trouvé (dans votre cas, serait 2
)