Ich bin überrascht, dass diese Frage immer noch nicht mit der neuesten Syntax versehen ist und füge meine 2 Cents hinzu.
Nehmen wir an, wir haben ein Array von Objekten arrObj und wollen obj darin suchen.
Array.prototype. indexOf -> (gibt zurück Index oder -1 ) wird im Allgemeinen verwendet, um den Index eines Elements in einem Array zu finden. Dies kann auch für die Suche nach Objekten verwendet werden, funktioniert aber nur, wenn Sie einen Verweis auf dasselbe Objekt übergeben.
let obj = { name: 'Sumer', age: 36 };
let arrObj = [obj, { name: 'Kishor', age: 46 }, { name: 'Rupen', age: 26 }];
console.log(arrObj.indexOf(obj));// 0
console.log(arrObj.indexOf({ name: 'Sumer', age: 36 })); //-1
console.log([1, 3, 5, 2].indexOf(2)); //3
Array.prototype. enthält -> (gibt zurück wahr o falsch )
console.log(arrObj.includes(obj)); //true
console.log(arrObj.includes({ name: 'Sumer', age: 36 })); //false
console.log([1, 3, 5, 2].includes(2)); //true
Array.prototype. finden. -> (nimmt Rückruf, gibt zuerst zurück Wert/Objekt die in CB true zurückgibt).
console.log(arrObj.find(e => e.age > 40)); //{ name: 'Kishor', age: 46 }
console.log(arrObj.find(e => e.age > 40)); //{ name: 'Kishor', age: 46 }
console.log([1, 3, 5, 2].find(e => e > 2)); //3
Array.prototype. findIndex -> (nimmt Rückruf, gibt zurück Index des ersten Wertes/Objekts, das in CB den Wert "true" liefert).
console.log(arrObj.findIndex(e => e.age > 40)); //1
console.log(arrObj.findIndex(e => e.age > 40)); //1
console.log([1, 3, 5, 2].findIndex(e => e > 2)); //1
Da find und findIndex einen Callback benötigt, können wir jedes Objekt (auch wenn wir die Referenz nicht haben) aus dem Array holen, indem wir kreativ die Bedingung true setzen.
65 Stimmen
Gerade getestet: Ihr Weg ist tatsächlich der schnellste für alle Browser: jsperf.com/find-element-in-obj-vs-array/2 (abgesehen von der Vorabspeicherung von a.length in einer Variablen), während die Verwendung von indexOf (wie in $.inArray) viel langsamer ist
23 Stimmen
Viele haben geantwortet, dass die Array#indexOf ist Ihre beste Wahl hier. Aber wenn Sie etwas wollen, das korrekt in Boolean umgewandelt werden kann, verwenden Sie dies:
~[1,2,3].indexOf(4)
wird 0 zurückgeben, was als falsch ausgewertet wird, während~[1,2,3].indexOf(3)
wird -3 zurückgeben, was als wahr ausgewertet wird.13 Stimmen
~
ist nicht das, was Sie für die Konvertierung in einen Booleschen Wert verwenden wollen, dafür brauchen Sie!
. Aber in diesem Fall wollen Sie die Gleichheit mit -1 prüfen, damit die Funktion nicht endetreturn [1,2,3].indexOf(3) === -1;
~
nicht binär ist, wird jedes Bit des Wertes einzeln invertiert.1 Stimmen
IE9 unterstützt
indexOf()
gemäß w3schools.com/jsref/jsref_indexof_array.asp . Wenn ältere Browser besser Ansatz ist, zu definierenprototype
paraindexOf()
Funktion, wie sie in Array.indexOf im Internet Explorer19 Stimmen
@Iordvlad
[1,2,3].indexOf(4)
wird tatsächlich Rückgabe -1 . Wie @mcfedr feststellte,~
ist die bitweise-NOT-Operator siehe ES5 11.4.8. Da die binäre Darstellung von-1
nur aus 1en besteht, ist sein Komplement0
die als falsch ausgewertet wird. Das Komplement einer beliebigen anderen Zahl ist ungleich Null, also wahr. Also,~
funktioniert einwandfrei und wird häufig in Verbindung mitindexOf
.9 Stimmen
Der Titel ist irreführend. Wo ist die
[[1,2],[3,4]].includes([3,4])
?1 Stimmen
@brad, wenn ich zum ersten Mal lesen Sie Ihre Frage, ich konnte nicht verstehen, Ihre Idee, ein Objekt hier ist Javascript-Objekt oder ein primitiver Wert. Angenommen, ich habe ein Array:
const arr = [1, 2, 3, { foo: 1}];
. Undarr.includes(1) // true
sondernarr.includes({ foo: 1 }) //false
1 Stimmen
Wenn die Elemente in Ihrem Array Objekte sind dann schauen Sie sich este Antwort, die die
some
Funktion.0 Stimmen
let arr = ['apple','banana', 1, 2, 4] if (!arr.includes('banana') ) console.log('No') else console.log('Yes')
0 Stimmen
Console.log(['joe', 'jane', 'mary'].includes('jane'));