2017-11-21 16 views
0

Ist es möglich, zu überprüfen, ob ein Array von Zeichenketten einen Teilstring enthält? Ich weiß, wie man findet, ob ein Array eine vollständige Übereinstimmung der Strings hat (mit $ .inArray, arr.includes, arr.indexOf etc ...), aber diese stimmen nicht mit einem Teilstring zu einem Array von Strings überein (zumindest für mich).Wie kann man prüfen, ob ein Array eine Teilkette enthält?

Wenn ich ein <select multiple> Element mit den folgenden Optionen:

positive (selected) 
positron (selected) 
negative 
negatron 

Wie kann ich boolean ob mein mehr Optionen Array enthält den Teil pos, um anzuzeigen, dass beide positve und positron in den Selektionen waren?

Ich möchte in der Lage sein, meinem Benutzer einige zusätzliche Fragen zu beantworten, basierend darauf, ob bestimmte Auswahlen getroffen werden, aber ich möchte nicht eine Reihe von if/then Anweisungen schreiben, um die verschiedenen Strings abzudecken.

Antwort

0

Die Array.prototype hat sehr nützlich .filter Funktion enthalten String.

const arr = ['positive', 'positron', 'negative', 'negatron']; 
 

 
function findMatches() { 
 
    let searchVal = document.getElementById('test').value; 
 
    let res = arr.filter(el => el.indexOf(searchVal) > -1); 
 
    document.getElementById('result').innerHTML = res.join(', '); 
 
}
<input type="text" id="test" /> 
 
<button type="button" onclick="findMatches()">Find</button> 
 
<br /> Array: ['positive', 'positron', 'negative', 'negatron']<br /> 
 
<span id="result"></span>

Und dann erweiterten Logik auf das gefilterte Array anzuwenden.

+0

Das funktioniert mit meiner Logik. Danke – user1837608

+0

Noch eine Frage, wenn es Ihnen nichts ausmacht. Wie kann ich array.filter in einen 'if'-Zustand integrieren? Bedeutung, {if (arr.filter (?? indexOf ('substr'))> -1) {// Logik ausführen} – user1837608

+0

Zurück zum OP. Wenn Sie * any * übereinstimmen möchten, können Sie '.reduce' verwenden, das einen einzelnen Wert zum Vergleichen zurückgibt (' [] 'ist möglich). Wenn Sie ** alle ** wollen, dann vergleichen Sie die Antwort mit dem Ergebnis in meiner Antwort. –

0

können Sie indexOf verwenden zu überprüfen, ob ein Array-Element für Ihre Zwecke

var testData = ['positive', 'negative'] 
 

 
testData.forEach(function(item) { 
 
    if (item.indexOf('pos') !== -1) { 
 
    console.log('Hava data') 
 
    } 
 
})

+0

Okay, aber zuerst durchlaufen Array mit jedem, so dass jedes Array-Element mit 'IndexOf' getestet wird. Ich verstehe es. Ist es möglich, das Array ohne den forEach-Schritt direkt nach Teilstrings abzufragen? – user1837608

+0

@ user1837608 Wenn es nur ein Element gibt, dann sehen Sie sich 'Array.prototype.find()' an, sonst würde ich mit der Version von Alex mit 'Array.prototype.filter()' gehen – Andreas

Verwandte Themen