417 Stimmen

JQuery.inArray(), wie benutzt man es richtig?

Erste Mal arbeite ich mit jQuery.inArray() und es verhält sich irgendwie seltsam.

Wenn das Objekt im Array ist, gibt es 0 zurück, aber 0 ist in Javascript falsch. Also wird das Folgende ausgegeben: "ist NICHT im Array"

var myarray = [];
myarray.push("test");

if(jQuery.inArray("test", myarray)) {
    console.log("ist im Array");
} else {
    console.log("ist NICHT im Array");
}

Ich muss die if-Anweisung ändern zu:

if(jQuery.inArray("test", myarray)==0)

Aber das macht den Code schwer lesbar. Besonders für jemanden, der diese Funktion nicht kennt. Sie würden erwarten, dass jQuery.inArray("test", myarray) true gibt, wenn "test" im Array ist.

Also meine Frage ist, warum wird das auf diese Weise gemacht? Ich mag das wirklich nicht. Aber es muss einen guten Grund dafür geben, es so zu machen.

873voto

Dennis Punkte 13620

inArray gibt den Index des Elements im Array zurück, nicht einen booleschen Wert, der angibt, ob das Element im Array vorhanden ist. Wenn das Element nicht gefunden wurde, wird -1 zurückgegeben.

Um zu überprüfen, ob ein Element im Array vorhanden ist, verwenden Sie:

if(jQuery.inArray("test", myarray) !== -1)

69voto

Jon Punkte 411383

$.inArray gibt den Index des Elements zurück, falls es gefunden wird, oder -1, wenn es nicht gefunden wird - kein boolescher Wert. Also ist das Korrekte

if(jQuery.inArray("test", myarray) != -1) {
    console.log("ist im Array");
} else {
    console.log("ist NICHT im Array");
}

29voto

6502 Punkte 108136

Die richtige Verwendung von inArray(x, arr) besteht darin, es überhaupt nicht zu verwenden und stattdessen arr.indexOf(x) zu verwenden.

Der offizielle Standardname ist auch klarer darauf hin, dass der zurückgegebene Wert ein Index ist. Wenn also das übergebene Element das erste ist, erhalten Sie eine 0 zurück (das in Javascript falsy ist).

(Hinweis: arr.indexOf(x) wird nicht in Internet Explorer bis IE9 unterstützt, daher funktioniert es, wenn Sie IE8 und früher unterstützen müssen, nicht und die jQuery-Funktion ist eine bessere Alternative.)

28voto

Patsy Issa Punkte 11055

Die Antwort stammt aus dem ersten Absatz der Dokumentation. Überprüfen Sie, ob das Ergebnis größer als -1 ist, nicht ob es wahr oder falsch ist.

Die Methode $.inArray() ist ähnlich wie die nativen Methode .indexOf() in JavaScript, da sie -1 zurückgibt, wenn kein Treffer gefunden wird. Wenn das erste Element im Array mit dem Wert übereinstimmt, gibt $.inArray() 0 zurück.

Weil JavaScript 0 lockere Gleichheit zu false behandelt (d.h. 0 == false, aber 0 !== false), wenn wir überprüfen, ob der Wert im Array vorhanden ist, müssen wir überprüfen, ob er nicht gleich (oder größer als) -1 ist.

21voto

Saurabh Solanki Punkte 2076

Anstatt jQuery.inArray() zu verwenden, können Sie auch die Methode includes für int-Arrays verwenden:

var array1 = [1, 2, 3];

console.log(array1.includes(2));
// erwartete Ausgabe: true

var pets = ['cat', 'dog', 'bat'];

console.log(pets.includes('cat'));
// erwartete Ausgabe: true

console.log(pets.includes('at'));
// erwartete Ausgabe: false

Überprüfen Sie den offiziellen Beitrag hier

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X