2016-06-18 16 views
6

po prostu zastanawiasz się, czy jest jakiś sposób, aby dodać wiele warunków sposobu .includes, na przykład:wielokrotne warunki .includes JavaScript() metoda

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

wyobrazić stany przecinek „lub” (to proszą teraz, jeśli ciąg zawiera cześć cześć lub Cześć. tak tylko wtedy, gdy jeden i tylko jeden z warunków jest prawdziwy.

jest jakiś sposób to robić?

+1

'byłoby or' oznacza, że ​​_at least_ jeden mecz byłby wystarczający. – robertklep

Odpowiedz

0

który powinien działać nawet wtedy, gdy jeden i tylko jeden z warunków jest spełniony:

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

Dziękuję, bardzo pomocne. – user6234002

3

z includes() Nie, ale można osiągnąć to samo z regex poprzez test():

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

Lub, jeśli słowa pochodzą z dynamicznym źródła:

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

Podejście REGEX jest lepszym pomysłem, ponieważ pozwala dopasować słowa jako rzeczywiste słowa, a nie żetony w innych słowach. Trzeba tylko znaku granicznego słowo \b, więc:

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

genialny, doskonale dziękuję bardzo. – user6234002

+0

To nie zadziała, jeśli słowa zawierają specjalne znaki regexp. Co więcej, nie spełni to pozornego wymogu PO, który pasuje tylko wtedy, gdy istnieje dopasowanie z ** pojedynczym ** słowem. –

17

Można użyć metody .some odwołuje here.

W some() metoda bada, czy co najmniej jeden element w tablicy przechodzi test realizowane przez funkcję usług.

// 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

dziękuję. bardziej praktyczne. – iedmrc99

+1

Punkt uwagi: 'some()' jest metodą, a nie operatorem. W przeciwnym razie dobra odpowiedź. – Utkanos

+0

Punkt wzięty. Dziękuję Ci – dinigo