HOWTO · JavaScript

Finden Sie den Index des Objekts im JavaScript-Array

In diesem Artikel wird erläutert, wie Sie den Index eines Objekts in einem JavaScript-Array finden

Auf dieser Seite

Verwenden Sie die native findIndex()-Methode, um die Position des ersten Objekts zu finden, das eine Bedingung erfüllt. Ein Prädikat kann beispielsweise die Eigenschaft name, id oder role eines Objekts vergleichen. findIndex() gibt eine Zahl zurück: den Array-Index des passenden Objekts oder -1, wenn kein Objekt die Bedingung erfüllt. Die Methode gibt nicht das Objekt selbst zurück.

Mit findIndex() den Index eines Objekts ermitteln

Rufen Sie findIndex() für das Array auf und übergeben Sie einen Callback, der bei einem Treffer einen wahrheitswertigen Wert zurückgibt. Dieses Beispiel durchsucht ein Personen-Array nach der ersten Person mit der Rolle „Editor“ und hält fest, welche Positionen die Methode prüft:

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

const people = [
  { name: "Mina", role: "author" },
  { name: "Luis", role: "editor" },
  { name: "Ava", role: "editor" },
];

const checkedIndexes = [];
const index = people.findIndex((person, currentIndex) => {
  checkedIndexes.push(currentIndex);
  return person.role === "editor";
});

console.log(index);
console.log(checkedIndexes.join(", "));
1
0, 1

Der zurückgegebene Wert ist 1, weil Luis der erste Editor ist. Ava erfüllt die Bedingung ebenfalls, aber die Suche endet, sobald Luis gefunden wurde. Deshalb wird Index 2 nicht geprüft. Dieselbe Methode funktioniert auch mit Arrays primitiver Werte: [3, 10, 17, 23].findIndex(age => age > 18) gibt beispielsweise die Position des ersten Alters über 18 zurück, also 3.

Callback und Rückgabewert von findIndex() verstehen

Der Callback erhält zuerst den aktuellen Array-Wert. Zusätzlich kann er den aktuellen Index und das durchsuchte Array entgegennehmen, und zwar in dieser Reihenfolge: (currentValue, index, array). Das Beispiel verwendet den Index, um die Suchreihenfolge zu zeigen. Verwenden Sie das Array-Argument, wenn ein Prädikat Kontext aus der ursprünglichen Sammlung benötigt. Für eine Suche nach einer Objekteigenschaft reicht normalerweise der aktuelle Wert aus.

Der Callback muss die Eigenschaft prüfen, nach der Sie suchen. Ein Prädikat wie person.role === "editor" gibt einen Boolean zurück; eine allgemeinere Bedingung kann auf mehrere Objekte zutreffen. findIndex() gibt trotzdem nur den ersten Treffer zurück. Wenn jeder Callback-Aufruf false ergibt, gibt die Methode -1 zurück. Prüfen Sie diesen Wert, bevor Sie ihn als Array-Position verwenden: people[-1] bezeichnet nicht das letzte Element und liefert keinen Treffer.

Für eine direkte Suche vergleichen Sie eine stabile Eigenschaft wie eine Kennung: people.findIndex(person => person.id === targetId). Verwenden Sie strikte Gleichheit, wenn der erwartete Wert denselben Typ wie die gespeicherte Eigenschaft hat. Möchten Sie das passende Objekt statt seiner Position abrufen, verwenden Sie find(). Beide Methoden suchen mit einem Prädikat, geben aber unterschiedliche Arten von Werten zurück.

Lodash _.findIndex() als Alternative verwenden

Wenn ein Projekt bereits lodash verwendet, bietet dessen Funktion _.findIndex() eine ähnliche Suche, ohne eine Array-Methode aufzurufen. Fügen Sie die Bibliothek über den Paketmanager des Projekts hinzu, zum Beispiel mit npm i lodash oder yarn add lodash. Die _.findIndex()-Dokumentation von Lodash beschreibt Kurzformen für Prädikate und weitere Optionen.

Übergeben Sie zuerst das Array und danach ein Prädikat. Für das obige Array people gibt _.findIndex(people, { role: "editor" }) den Wert 1 zurück; Lodash behandelt das Objekt-Prädikat als Eigenschaftsvergleich. Wenn die Bedingung eigene Logik benötigt, können Sie stattdessen eine Funktion wie person => person.role === "editor" übergeben. Mit dem optionalen Argument fromIndex legen Sie fest, an welcher Position die Suche beginnt: _.findIndex(people, { role: "editor" }, 2) startet bei Index 2 und findet dort Ava. Die Schreibweise unterscheidet sich von der nativen Methode people.findIndex(predicate), aber beide geben den ersten passenden Index ab ihrer jeweiligen Startposition zurück oder -1, wenn kein späteres Element passt. Wählen Sie lodash, wenn die Bibliothek bereits zum Projekt gehört oder ihre Kurzform für Prädikate nützlich ist. Für die native Methode ist keine zusätzliche Bibliothek erforderlich.