2016-06-18 15 views
6

solo chiedendo, c'è un modo per aggiungere più condizioni a un metodo .includes, ad esempio:condizioni multiple per .includes JavaScript() il metodo

var value = str.includes("hello", "hi", "howdy"); 

immaginare gli stati virgola "o" (è chiedere ora, se la stringa contiene ciao ciao o Salve. quindi solo se uno, e solo una delle condizioni è vera.

esiste un metodo di fare questo?

+1

'o' implicherebbe che _at least_ una partita sarebbe sufficiente. – robertklep

risposta

0

che dovrebbe funzionare anche se uno, e solo una delle condizioni è vera:

var str = "bonjour le monde vive le javascript"; 
var arr = ['bonjour','europe', 'c++']; 

function contains(target, pattern){ 
    var value = 0; 
    pattern.forEach(function(word){ 
     value = value + target.includes(word); 
    }); 
    return (value === 1) 
} 

console.log(contains(str, arr)); 
+0

grazie, molto utile. – user6234002

3

Con includes() , No, ma è possibile ottenere la stessa cosa con REGEX via test():

var value = /hello|hi|howdy/.test(str); 

Oppure, se le parole sono provenienti da una fonte dinamica:

var words = array('hello', 'hi', 'howdy'); 
var value = new RegExp(words.join('|')).test(str); 

L'approccio REGEX è un'idea migliore, perché ti consente di abbinare le parole come parole effettive, non come token in altre parole. Hai solo bisogno del marcatore limite di parola \b, quindi:

var str = 'hilly'; 
var value = str.includes('hi'); //true, even though it doesn't say 'hi' 
var value = /\bhi\b/.test(str); //false - 'hi' appears but not as a word 
+1

brillante, perfetto grazie mille. – user6234002

+0

Questo non funzionerà se le parole contengono caratteri speciali regexp. Inoltre, questo non soddisferà il requisito apparente dell'OP che corrisponde solo se c'è una corrispondenza con una ** singola ** parola. –

17

È possibile utilizzare il metodo .some riferimento here.

Le prove some() metodo se almeno un elemento dell'array passa il test realizzata dalla funzione prevista.

// test cases 
 
var str1 = 'hi, how do you do?'; 
 
var str2 = 'regular string'; 
 

 
// does the test strings contains this terms? 
 
var conditions = ["hello", "hi", "howdy"]; 
 

 
// run the tests agains every element in the array 
 
var test1 = conditions.some(el => str1.includes(el)); 
 
var test2 = conditions.some(el => str2.includes(el)); 
 

 
// display results 
 
console.log(str1, ' ===> ', test1); 
 
console.log(str2, ' ===> ', test2);

+0

grazie. più pratico. – iedmrc99

+1

Punto di nota: 'some()' è un metodo, non un operatore. Altrimenti, buona risposta. – Utkanos

+0

Punto preso. Grazie – dinigo