Un'altra soluzione, probabilmente più efficiente rispetto alla ricerca di ogni valore, può essere quello di creare un'espressione regolare dai valori.
Mentre l'iterazione di tutti i possibili valori implicherà l'analisi multipla del testo, con un'espressione regolare, solo uno è sufficiente.
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']));
Limitazione Questo approccio sarà sicuro per i valori contenenti uno dei seguenti caratteri: \^$ * + ? . () | { } [ ]
(fanno parte della sintassi regex).
Se questa è una possibilità, è possibile utilizzare la seguente funzione (da sindresorhus di escape-string-regexp) per proteggere (fuga) i valori rilevanti:
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
Tuttavia, se avete bisogno di chiamare per ogni possibile values
, è possibile che una combinazione di Array.prototype.some
e String.prototype.includes
diventi più efficiente (vedere @Andy e la mia altra risposta).
fonte
2016-05-04 09:15:03
Lo si può fare facilmente senza lodash 'values.some (el => text.indexOf (el)> -1)' btw. – Andy