Existe-t-il un moyen dans lodash de vérifier si une chaîne contient l'une des valeurs d'un tableau?
Par exemple:
var text = 'this is some sample text';
var values = ['sample', 'anything'];
_.contains(text, values); // should be true
var values = ['nope', 'no'];
_.contains(text, values); // should be false
Une autre solution, probablement plus efficace que la recherche de toutes les valeurs, peut être de créer une expression régulière à partir des valeurs.
Bien que l'itération à travers chaque valeur possible impliquera une analyse multiple du texte, avec une expression régulière, une seule est suffisante.
function multiIncludes(text, values){
var re = new RegExp(values.join('|'));
return re.test(text);
}
document.write(multiIncludes('this is some sample text',
['sample', 'anything']));
document.write('<br />');
document.write(multiIncludes('this is some sample text',
['nope', 'anything']));
Limitation Cette approche échouera pour les valeurs contenant l'un des caractères suivants: \ ^ $ * + ? . ( ) | { } [ ]
(elles font partie de la syntaxe d'expression régulière).
Si c'est une possibilité, vous pouvez utiliser la fonction suivante (de sindresorhus escape-string-regexp ) pour protéger (escape) les valeurs pertinentes:
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
Cependant, si vous devez l'appeler pour chaque values
possible, il est possible qu'une combinaison de Array.prototype.some
et String.prototype.includes
devient plus efficace (voir @Andy et mon autre réponse).
Non. Mais c'est facile à implémenter en utilisant String.includes . Vous n'avez pas besoin de lodash .
Voici une fonction simple qui fait exactement cela:
function multiIncludes(text, values){
return values.some(function(val){
return text.includes(val);
});
}
document.write(multiIncludes('this is some sample text',
['sample', 'anything']));
document.write('<br />');
document.write(multiIncludes('this is some sample text',
['nope', 'anything']));