Wie kann ich überprüfen, ob ein array umfasst ein Objekt in JavaScript?

Was ist der prägnanteste und effizienten Weg, um herauszufinden, ob ein JavaScript-array ein Objekt enthält?

Dies ist der einzige Weg, ich weiß, es zu tun:

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}

Gibt es eine bessere und genauere Weg, um dies zu erreichen?

Diese ist sehr eng mit Stack Overflow Frage Beste Weg zu finden, ein Element in ein JavaScript-Array?, welche Adressen das Auffinden von Objekten in einem array mit indexOf.

gerade getestet: dein Weg ist tatsächlich der Schnellste bei allen Browsern: jsperf.com/find-element-in-obj-vs-array/2 (abgesehen von pre-speichern.Länge in einer Variablen), während indexOf (wie in $.inArray) ist viel langsamer
viele haben geantwortet, dass das Array#indexOf ist Ihre beste Wahl hier. Aber wenn du willst das etwas richtig cast zu Boolean, verwenden Sie diese: ~[1,2,3].indexOf(4) 0 zurück, die als false ausgewertet werden, in der Erwägung, dass ~[1,2,3].indexOf(3) zurück -3, die als true ausgewertet werden.
~ ist nicht das, was Sie verwenden möchten, um zu konvertieren, um einen booleschen Wert, für die, die Sie brauchen !. Aber in diesem Fall wollen zu überprüfen, die Gleichheit mit -1, s o die Funktion könnte Endereturn [1,2,3].indexOf(3) === -1; ~ ist eine binäre nicht, wird es invertiert jedes bit der Wert individuell.
[1,2,3].indexOf(4) tatsächlich return -1. @Mcfedr darauf hingewiesen, ~ ist die bitwise-NICHT-operator finden Sie unter ES5 11.4.8. Sache ist, da die binäre Darstellung der -1 besteht aus nur 1, ist die Ergänzung ist 0, die als false ausgewertet wird. Das Komplement jede andere Zahl ungleich null, also wahr. Also ~ Prima funktioniert, und wird oft in Verbindung mit indexOf.
Der Titel ist irreführend. Wo ist der [[1,2],[3,4]].includes([3,4]) ?

InformationsquelleAutor brad | 2008-10-25

Schreibe einen Kommentar