Start · Sprachen · JavaScript · Referenz · Array.prototype.lastIndexOf()

Array.prototype.lastIndexOf()

Methode

Gibt den letzten Index zurück, an dem <code>searchElement</code> im Array vorkommt, oder <code>-1</code>, wenn es fehlt. Die Suche läuft von hinten nach vorne.

seit JavaScript ES5 (ECMAScript 2009) – Baseline: alle Browser Kategorie: method-property

Signatur

Array.prototype.lastIndexOf(searchElement, fromIndex)

Beschreibung

lastIndexOf() durchsucht ein Array von hinten nach vorne und gibt den Index des ersten Treffers aus dieser Richtung zurück. Das ist also das letzte Vorkommen des gesuchten Werts. Wird nichts gefunden, ist das Ergebnis -1. Die Methode ist das Gegenstück zu indexOf(), das von vorne sucht.

Verglichen wird mit strikter Gleichheit (===). Deshalb findet lastIndexOf() niemals NaN, und Objekte werden nur über ihre Referenz gefunden, nicht über ihren Inhalt. Für eigene Bedingungen, etwa „letztes Objekt mit id === 3“, ist findLastIndex() die richtige Wahl.

Mit dem optionalen Parameter fromIndex legst du fest, ab welcher Position rückwärts gesucht wird. Negative Werte zählen vom Ende des Arrays: -1 ist das letzte Element. Typische Anwendungen sind das letzte Vorkommen eines Werts in einer Log- oder Verlaufsliste, das Erkennen von Duplikaten (zusammen mit indexOf()) und das Durchlaufen aller Vorkommen von hinten.

Die Methode ist generisch. Sie funktioniert über Array.prototype.lastIndexOf.call() auch mit array-ähnlichen Objekten, die eine length-Eigenschaft und numerische Schlüssel haben.

Parameter

Name Typ Default Beschreibung
$searchElement Pflicht any Der gesuchte Wert. Verglichen wird mit ===.
$fromIndex number array.length - 1 Nullbasierter Index, ab dem rückwärts gesucht wird. Wird in eine Ganzzahl umgewandelt. Negative Werte zählen vom Ende (fromIndex + array.length). Ist das Ergebnis kleiner als -array.length, wird nicht gesucht und -1 zurückgegeben. Werte ab array.length durchsuchen das ganze Array.

Rückgabewert

Typ
number
Beschreibung
Der Index des letzten Vorkommens von searchElement oder -1, wenn der Wert nicht gefunden wird.

Beispiele

Letztes Vorkommen eines Werts finden

const besuchteSeiten = ['start', 'produkte', 'kontakt', 'produkte', 'impressum'];

console.log(besuchteSeiten.lastIndexOf('produkte'));
console.log(besuchteSeiten.indexOf('produkte'));
console.log(besuchteSeiten.lastIndexOf('blog'));
3 1 -1

Suche mit fromIndex (auch negativ)

const zahlen = [2, 5, 9, 2, 7, 2];

console.log(zahlen.lastIndexOf(2));      // ganzes Array
console.log(zahlen.lastIndexOf(2, 4));   // ab Index 4 rückwärts
console.log(zahlen.lastIndexOf(2, -3));  // ab Index 3 rückwärts
console.log(zahlen.lastIndexOf(2, -7));  // vor dem Anfang: keine Suche
5 3 3 -1

Alle Vorkommen von hinten ermitteln

const findeAlleIndizes = (arr, wert) => {
  const indizes = [];
  let i = arr.lastIndexOf(wert);
  while (i !== -1) {
    indizes.push(i);
    // Bei i === 0 abbrechen, sonst würde fromIndex -1 wieder am Ende beginnen
    i = i > 0 ? arr.lastIndexOf(wert, i - 1) : -1;
  }
  return indizes;
};

console.log(findeAlleIndizes(['a', 'b', 'a', 'c', 'a'], 'a'));
[ 4, 2, 0 ]

Eindeutige Werte erkennen (Duplikat-Prüfung)

const tags = ['js', 'css', 'html', 'js', 'node'];

// Ein Wert ist eindeutig, wenn erstes und letztes Vorkommen übereinstimmen
const eindeutig = tags.filter(
  (tag) => tags.indexOf(tag) === tags.lastIndexOf(tag)
);

console.log(eindeutig);
[ 'css', 'html', 'node' ]

// Wichtig · Fallstricke

  • NaN wird nie gefunden: [NaN].lastIndexOf(NaN) ergibt -1, weil NaN !== NaN gilt. Verwende stattdessen findLastIndex(Number.isNaN) oder includes().
  • Objekte werden über die Referenz verglichen: [{ id: 1 }].lastIndexOf({ id: 1 }) ergibt -1. Für eine Suche nach Inhalt nimm findLastIndex().
  • Falle mit fromIndex in Schleifen: Wird i - 1 zu -1, beginnt die Suche wieder am Ende des Arrays. Das kann zu Endlosschleifen führen. Prüfe deshalb vorher auf i === 0.
  • Lücken: Leere Plätze in Arrays mit Lücken werden übersprungen. [, 1].lastIndexOf(undefined) ergibt -1.
  • Performance: Die Suche ist linear (O(n)). Bei vielen Abfragen auf großen Datenmengen ist ein Map oder Set deutlich schneller.
  • Die Methode wird in allen Browsern und Node.js-Versionen unterstützt. Typisierte Arrays haben eine eigene Variante: TypedArray.prototype.lastIndexOf().