Nehmen wir an, ich habe Folgendes:
var blockedTile = new Array("118", "67", "190", "43", "135", "520");
Es gibt mehr Array-Elemente, aber diese sind aus Gründen der Lesbarkeit nur wenige. Wie auch immer, ich könnte eine "for" -Schleife ausführen, aber jedes Mal, wenn Sie auf die Karte klicken, werden 500 Schleifen ausgeführt. Gibt es eine andere Möglichkeit, um festzustellen, ob sich eine bestimmte Zeichenfolge in einem Array befindet?
javascript
Prüfung
quelle
quelle
if(!!~blockedTile.indexOf('118))
umzudrehen. Diese Methode gibt immer true zurück, wenn das Ergebnis> -1 ist, und false, wenn result === -1indexOf()
kann auch auf Literal-Arrays angewendet werden, zif (-1 == [84, 116].indexOf(event.keyCode))
. Getestet auf Chrome 37.0.2062.122.indexOf(…) >= 0
. macht keinen Unterschied und ich vergesse, wo ich es als Gewohnheit aufgenommen habeWie bereits erwähnt, wenn Ihr Browser unterstützt
indexOf()
, großartig! Wenn nicht, müssen Sie es pollyfil oder auf einen Gebrauchsgürtel wie lodash / Unterstrich verlassen .Ich wollte nur diesen neueren ES2016- Zusatz hinzufügen (um diese Frage auf dem neuesten Stand zu halten):
Array.prototype.includes ()
quelle
quelle
Verwenden Sie Underscore.js
Es ist browserübergreifend kompatibel und kann eine binäre Suche durchführen, wenn Ihre Daten sortiert sind.
_.Index von
Beispiel
quelle
Einige Browser unterstützen
Array.indexOf()
.Wenn nicht, können Sie das
Array
Objekt über seinen Prototyp wie folgt erweitern ...Quelle .
quelle
Verwenden Sie einfach für Ihren Geschmack:
quelle
quelle
Der beste Weg, dies im Jahr 2019 zu tun, ist die Verwendung von
.includes()
Der erste Parameter ist das, wonach Sie suchen. Der zweite Parameter ist die Indexposition in diesem Array, an der mit der Suche begonnen werden soll.
Wenn Sie hier böse sein müssen, gibt es viele alte Antworten.
quelle
includes
Lösung ist in den Antworten von Kutyel (2016), Сергей Савельев (2017) und Krunal Limbad (2018) mit ebenso detaillierten Beispielen und ReferenzenBereits oben beantwortet, wollte aber teilen.
bekommt einen Hinweis hier . Sie haben auch Polyfill für oben.
quelle
Array.includes()
wird in ES7 (ECMAScript 2017) eingeführt und funktioniert nicht mit alten Browsern. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Abhängig von der verfügbaren JavaScript-Version können Sie Folgendes verwenden
indexOf
:Oder
some
:Wenn Sie diese Art von Existenzprüfung durchführen, ist es jedoch besser, ein Objekt zum Speichern Ihrer Zeichenfolgen zu verwenden (oder möglicherweise ein Objekt sowie das Array, je nachdem, was Sie mit Ihren Daten tun).
quelle
Ich würde eine andere Datenstruktur verwenden, da das Array nicht die beste Lösung zu sein scheint.
Verwenden Sie anstelle eines Arrays ein Objekt wie folgt als Hash-Tabelle:
(gepostet auch in jsbin )
Konsolenausgabe:
Das ist eine einfache Lösung. Wenn Sie sich mehr für einen objektorientierten Ansatz interessieren , suchen Sie bei Google nach "js hashtable" .
quelle
IMHO am besten kompatibel mit älteren Browsern
Durch Umwandeln einer Array-Kopie in eine CSV-Zeichenfolge können Sie die Zeichenfolge in älteren Browsern testen.
quelle
['Lemon Pie'].inArray('Lemon')
wird zurückkehrenTrue
. Sie können die Nadel mit umwickeln,
, um sie zu umgehen, oder Regex-Matching verwenden, um dies ebenfalls zu tun. Eine Verbindung ist jedoch vorzuziehen, wenn Sie etwas Dunkleres verwenden als,
aus ähnlichen falsch positiven Gründen (|
z. B.). Es hängt vom Datensatz abWarum verwenden Sie Array.filter nicht?
Kopieren Sie das einfach in Ihren Code und los geht's:
quelle
im Array-Beispiel ist es dasselbe in PHP (in_array)
quelle
quelle
includes
. Wie liefert diese Antwort zusätzliche Werte im Vergleich zu ihnen?Sie können den folgenden Code ausprobieren. Überprüfen Sie http://api.jquery.com/jquery.grep/
Überprüfen Sie arr.length, wenn es mehr als 0 ist, bedeutet dies, dass eine Zeichenfolge vorhanden ist, andernfalls ist sie nicht vorhanden.
quelle
Ich denke, der einfachste Weg ist:
quelle