Gibt es in JavaScript eine Möglichkeit, Werte aus einem Array zu vergleichen und festzustellen, ob sie sich in einem anderen Array befinden?
Ähnlich wie bei PHP in_array
?
quelle
Gibt es in JavaScript eine Möglichkeit, Werte aus einem Array zu vergleichen und festzustellen, ob sie sich in einem anderen Array befinden?
Ähnlich wie bei PHP in_array
?
Nein, es hat keinen. Aus diesem Grund enthalten die meisten gängigen Bibliotheken eine in ihren Dienstprogrammpaketen. Schauen Sie sich jQuery InArray und Prototype Array.indexOf für Beispiele.
Die Implementierung von jQuery ist so einfach, wie Sie es vielleicht erwarten:
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(haystack[i] == needle) return true;
}
return false;
}
Wenn Sie mit einer vernünftigen Anzahl von Array-Elementen zu tun haben, reicht das oben Genannte aus.
EDIT : Whoops. Ich habe nicht einmal bemerkt, dass Sie sehen wollten, ob sich ein Array in einem anderen befindet. Laut der PHP-Dokumentation ist dies das erwartete Verhalten von PHPs in_array
:
$a = array(array('p', 'h'), array('p', 'r'), 'o');
if (in_array(array('p', 'h'), $a)) {
echo "'ph' was found\n";
}
if (in_array(array('f', 'i'), $a)) {
echo "'fi' was found\n";
}
if (in_array('o', $a)) {
echo "'o' was found\n";
}
// Output:
// 'ph' was found
// 'o' was found
Der von Chris und Alex gepostete Code folgt diesem Verhalten nicht. Alex's ist die offizielle Version von Prototypes indexOf und Chris's ähnelt eher PHPs array_intersect
. Das macht was du willst:
function arrayCompare(a1, a2) {
if (a1.length != a2.length) return false;
var length = a2.length;
for (var i = 0; i < length; i++) {
if (a1[i] !== a2[i]) return false;
}
return true;
}
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(typeof haystack[i] == 'object') {
if(arrayCompare(haystack[i], needle)) return true;
} else {
if(haystack[i] == needle) return true;
}
}
return false;
}
Und das ist mein Test von oben drauf:
var a = [['p','h'],['p','r'],'o'];
if(inArray(['p','h'], a)) {
alert('ph was found');
}
if(inArray(['f','i'], a)) {
alert('fi was found');
}
if(inArray('o', a)) {
alert('o was found');
}
// Results:
// alerts 'ph' was found
// alerts 'o' was found
Beachten Sie, dass ich den Array-Prototyp absichtlich nicht erweitert habe, da dies im Allgemeinen eine schlechte Idee ist.
jQuery.inArray()
gibt keinen Booleschen Wert zurück. Es gibt den Index des gefundenen Elements zurück oder -1, wenn es nicht gefunden wirdindexOf
w3schools.com/jsref/jsref_indexof_array.aspEs gibt jetzt
Array.prototype.includes
:quelle
Array.indexOf
wurde in JavaScript 1.6 eingeführt, wird jedoch in älteren Browsern nicht unterstützt. Zum Glück haben die Jungs bei Mozilla die ganze harte Arbeit für Sie geleistet und Ihnen dies aus Kompatibilitätsgründen zur Verfügung gestellt:Es gibt sogar einige praktische Verwendungsausschnitte für Ihr Skriptvergnügen.
quelle
this.length >>> 0
? Ist das eine Konvertierung in einen Zahlentyp?Array.indexOf
ist jetzt durch ECMAScript Fifth Edition standardisiert und sollte daher als die richtige "native" Methode angesehen werden. Sie müssen dieses Backup jedoch noch lange schnüffeln und für ältere Browser bereitstellen. @harto: Ja, es wirdthis.length
in eine Zahl konvertiert , die als 32-Bit-Ganzzahl ohne Vorzeichen dargestellt werden kann. Ein NativeArray
kann nur eine Länge haben, die dieser bereits entspricht. Die Spezifikation besagt jedoch, dass SieArray.prototype
Methoden für Native-JS-Objekte aufrufen können, die dies nicht sindArray
. Dieses und das andere pedantische Argument, das die Dinge überprüft, soll die absolute Einhaltung der Spezifikationen gewährleisten.Wenn die Indizes nicht aufeinanderfolgend sind oder wenn die Indizes nicht aufeinanderfolgend sind, wird der Code in den anderen hier aufgeführten Lösungen unterbrochen. Eine Lösung, die etwas besser funktionieren würde, könnte sein:
Und als Bonus ist hier das Äquivalent zu PHPs array_search (um den Schlüssel des Elements im Array zu finden:
quelle
Es gibt ein Projekt namens Locutus , es implementiert PHP-Funktionen in Javascript und in_array () ist enthalten. Sie können es genau so verwenden, wie Sie es in PHP verwenden.
Anwendungsbeispiele:
quelle
Sie können einfach die Funktion "Includes" verwenden, wie in dieser Lektion zu w3schools erläutert
es sieht aus wie
quelle
quelle
Die jQuery-Lösung ist verfügbar. Überprüfen Sie die Dokumentation hier: http://api.jquery.com/jquery.inarray/
quelle
Es gibt eine äquivalente Funktion:
Schauen Sie hier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
quelle
Wenn Sie nur überprüfen möchten, ob sich ein einzelner Wert in einem Array befindet, erledigt der Code von Paolo die Aufgabe. Wenn Sie überprüfen möchten, welche Werte beiden Arrays gemeinsam sind, möchten Sie Folgendes (mithilfe der inArray-Funktion von Paolo):
Dies gibt ein Array von Werten zurück, die sowohl in
a
als auch in enthalten sindb
. (Mathematisch gesehen ist dies ein Schnittpunkt der beiden Arrays.)EDIT: Siehe Paolos Edited - Code für die Lösung für Ihr Problem. :) :)
quelle
Wenn Sie alle verfügbaren PHP- Parameter benötigen , verwenden Sie diese:
quelle
Fügen Sie diesen Code Ihrem Projekt hinzu und verwenden Sie die inArray-Methoden im Objektstil
quelle
Mit Dojo Toolkit würden Sie verwenden
dojo.indexOf()
. Die Dokumentation finden Sie unter dojo.indexOf und einige Beispiele unter Arrays Made Easy von Bryan Forbes.quelle
Dabei ist Heuhaufen ein Array und Nadel ein Element im Array. Wenn das nicht gefundene Element undefiniert zurückgegeben wird, wird dasselbe Element zurückgegeben.
quelle
quelle
Ich habe hier auf SO eine großartige jQuery-Lösung gefunden .
Ich wünschte, jemand würde ein Beispiel dafür in Unterstrich posten.
quelle
quelle
indexOf(needle) > 0
es falsch zurückgeben wirdEin Äquivalent von
in_array
withunderscore
ist _.indexOfBeispiele:
_.indexOf([3, 5, 8], 8); // returns 2, the index of 8 _.indexOf([3, 5, 8], 10); // returns -1, not found
quelle
Wenn Sie es in einer Klasse verwenden möchten und wenn Sie es vorziehen, dass es funktionsfähig ist (und in allen Browsern funktioniert):
Hoffe es hilft jemandem :-)
quelle