2016-04-18 9 views
0

Ich habe ein Array wie folgt in WinkelWinkel finden String in Array

app.myStringArray= 
    [ 'abcdefg', 
     '123456', 
     'qwerty' 
    ]; 

Derzeit ich eine gemeinsame Methode, die in dem Feld für Wert wird überprüft, wie diese

app.factory('commons', function() { 


    var commons= {}; 

    //Checks if the current url is 
    commons.checkString= function (str) { 

     if (app.myStringArray.indexOf(str) > -1) { 
      return true; //current string is in list 
     } else { 
      return false; 
     } 
    } 

    return commons; 
} 
); 

Dies funktioniert, wenn ich sende in der vollständigen Zeichenfolge 'abcdefg' oder '123456' oder 'qwerty'.

Wie kann ich es funktionieren lassen, auch wenn ich Teil der Zeichenfolge wie für zB: 'bcd'?

Antwort

2

Um zu überprüfen, ob eine Zeichenfolge ein anderes enthält Sie String.includes()String.indexOf() oder als von ES6 verwenden können.

Um zu überprüfen, ob mindestens ein Element in einem Array mit einem Prädikat übereinstimmt, können Sie Array.some() verwenden oder einfach über das Array selbst iterieren.

ES6 Lösung:

function checkString(str) {  
    return myStringArray.some(s => s.includes(str)); 
} 

ES5 Lösung:

function checkString2(str) {  
    return myStringArray.some(function(s) { 
    return s.indexOf(str) > -1; 
    }); 
} 
+0

sollte es nicht sein str.indexOf (s)> -1? – user20358

+0

@ user20358 Nicht, wenn Sie testen möchten, ob "abcdefg" (= s) "bcd" (= str) enthält. – zeroflagL

1

Iterieren Sie durch das Array und überprüfen Sie indexOf(str) für jede Zeichenfolge im Array. Keine Notwendigkeit für Angular.

var array = ['abcdefg', '123456', 'qwerty']; 
 

 
function checkString(str) { 
 
    
 
    for (var i = 0; i < array.length; i++) { 
 
    if (array[i].indexOf(str) > -1) { 
 
     return true; 
 
    } 
 
    } 
 
    
 
    return false; 
 
} 
 

 
alert(checkString("bcd"));