2016-11-08 3 views
0

Ich möchte eine Zeichenfolge für mehrere Zeichenfolgen suchen, und das Rück true wenn es dort eine von ihnen findet in, false sonst, so etwas wie:Wie finde ich ein Array von Strings in einem String?

var s = "thing1 thing2" 
s.contains(["thing1","thing44444"]) // true 
s.contains("1") // true 
s.contains("x") // false 

Hier ist, was habe ich so weit, aber es wird immer messier und funktioniert nicht richtig:

String.prototype.contains = function(xv) { 
    var t = this 
    if(xv.isString()){ // isString/isArray are functions I made elsewhere in my code, they work. 
     if(t.indexOf(xv) > -1) 
      return true; 
    } else if(xv.isArray()) { 
     if(xv.contains(t)){ 
      return true 
     } 
     for(v in xv){ 
      if(t.indexOf(xv[v]) > -1){ 
       return true 
      } 
     } 
    } else { 
     return false 
    } 
} 

Ab jetzt wird es undefined zurück, wenn sie es durch die for Schleife macht, ohne etwas zu finden. Ich hatte return false nach der for Schleife, aber es würde laufen, bevor die for beendet.

Ich habe das Gefühl, dass es einen einfacheren Weg geben muss.

Ich habe bereits versucht How do you search multiple strings with the .search() Method?, aber ich konnte ein Array nicht an .search() senden.

Frameworks Ich verwende: Winkel 1.5.8, jquery 1.11.1

+0

„Ich hatte nach dem return false for-Schleife, aber es würde vor dem für fertig laufen. " Dies ist mit dem Code in Ihrem Beispiel nicht möglich. – zzzzBov

+0

Vielleicht möchten Sie den Prototyp der eingebauten Objekte überdenken oder zumindest sicherstellen, dass Sie das Polyfilling korrekt durchführen. Siehe auch [Warum ist die Erweiterung nativer Objekte eine schlechte Methode?] (Http://stackoverflow.com/q/14034180/215552). Zum Beispiel ist ['Array.isArray'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray) bereits eine Funktion in neueren Versionen von JavaScript und Angular hat bereits ['angular.isString()'] (https://docs.angularjs.org/api/ng/function/angular.isString) ... –

+0

@MikeMcCaughan aus der ersten Antwort, die Sie zitiert haben: "Das Verhalten von Ein Objekt, das nur von Ihrem eigenen Code verwendet wird, ist in Ordnung. " Ich schätze jedoch die Referenzen. Viele gute Infos hier. Danke Bruder. –

Antwort

4

Sie Array.some und String.indexOf oder String.includes verwenden können

var s1 = "thing1 thing2"; 
 
var s2 = "Hello Kitty"; 
 

 
var r1 = ["thing1","thing44444"].some(x => s1.includes(x)); 
 
var r2 = ["Travis","Heeeeeeter"].some(x => s2.includes(x)); 
 

 
console.log(r1, r2); // true, false

Verwandte Themen