Je travaille avec un problème de performance sur JavaScript. Donc, je veux juste demander: quel est le moyen le plus rapide de vérifier si une chaîne contient une autre sous-chaîne (j'ai juste besoin de la valeur booléenne)? Pouvez-vous suggérer votre idée et un exemple de code de code?
Est-ce que ça marche pour toi?
string1.indexOf(string2) >= 0
Edit: Cela ne peut pas être plus rapide qu'un RegExp si la chaîne2 contient des modèles répétés. Sur certains navigateurs, indexOf peut être beaucoup plus lent que RegExp. Voir les commentaires.
Edit 2: RegExp peut être plus rapide que indexOf lorsque les chaînes sont très longues et/ou contiennent des modèles répétés. Voir les commentaires et la réponse de @ Felix.
J'ai constaté que l'utilisation d'une simple boucle for, l'itération sur tous les éléments de la chaîne et la comparaison à l'aide de charAt
sont plus rapides que indexOf
ou Regex
. Le code et la preuve sont disponibles sur JSPerf .
ETA: indexOf
et charAt
ont tous deux des performances similaires sur Chrome Mobile selon les données de la portée du navigateur répertoriées sur jsperf.com.
Dans ES6, la méthode includes()
est utilisée pour déterminer si une chaîne peut être trouvée dans une autre chaîne, en renvoyant true
ou false
selon le cas.
var str = 'To be, or not to be, that is the question.';
console.log(str.includes('To be')); // true
console.log(str.includes('question')); // true
console.log(str.includes('nonexistent')); // false
Voici jsperf entre
var ret = str.includes('one');
Et
var ret = (str.indexOf('one') !== -1);
Comme le résultat indiqué dans jsperf, il semble que les deux fonctionnent bien.
Le plus rapide
var string = "bonjour", substring = "lo"; string.includes (substring);
var chaîne = "bonjour", sous-chaîne = "lo"; chaîne.indexOf (sous-chaîne)! == -1;
Pour trouver une chaîne simple, utiliser la méthode indexOf () et regex est à peu près la même chose: http://jsperf.com/substring - choisissez donc celle qui vous semble la plus facile à écrire.
J'ai fait un jsben.ch pour vous http://jsben.ch/#/aWxtF ... semble que indexOf est un peu plus rapide.
C'est un moyen facile d'utiliser la méthode .match()
pour string.
var re = /(AND|OR|MAYBE)/;
var str = "IT'S MAYBE BETTER WAY TO USE .MATCH() METHOD TO STRING";
console.log('Do we found something?', Boolean(str.match(re)));
Je vous souhaite une belle journée, monsieur!