Die lastIndexOf()
Methode gibt den letzten Index zurück, an dem ein übergebenes Element im Array gefunden wurde, oder -1, wenn es nicht vorhanden ist. Das Array wird rückwärts durchsucht beginnend beim fromIndex
.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
arr.lastIndexOf(searchElement) arr.lastIndexOf(searchElement, fromIndex)
Parameter
searchElement
- Element, nach dem im Feld gesucht wird.
fromIndex
Optional- Der Index an dem die Suche rückwärts begonnen wird. Der Standardwert ist die Arraylänge minus eins (
arr.length - 1
), d. h. das gesamte Feld wird durchsucht. Wenn der Index größer oder gleich der Länge des Arrays ist, wird das gesamte Array durchsucht. Ist der Index eine negative Zahl, wird er als Offset vom Ende des Arrays behandelt. Bei Verwendung eines negativen Index wird das Array trotzdem von hinten nach vorne durchsucht. Wenn der errechnete Index kleiner als 0 ist, wird -1 zurückgegeben, d.h. das Feld wird nicht durchsucht.
Rückgabewert
Der letzte Index des gesuchten Elementes aus dem Feld. -1 wenn keins gefunden wurde.
Beschreibung
lastIndexOf
vergleicht das searchElement
mit den Elementen des Feldes und verwendet hierzu die strikte Gleichheit (Die gleiche Methode, die beim ===
Operator (triple-equals) angewendet wird.
Beispiele
lastIndexOf
verwenden
Das folgende Beispiel verwendet lastIndexOf
, um Werte in einem Array zu finden.
var numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2); // 3
numbers.lastIndexOf(7); // -1
numbers.lastIndexOf(2, 3); // 3
numbers.lastIndexOf(2, 2); // 0
numbers.lastIndexOf(2, -2); // 0
numbers.lastIndexOf(2, -1); // 3
Finde jedes Vorkommen eines Elementes
Das folgende Beispiel benutzt lastIndexOf
, um alle Indizes eines Elementes in einem Array zu finden, wobei sie mit Hilfe von push
zu einem anderen Array hinzugefügt werden, sobald sie gefunden werden.
var indices = [];
var array = ['a', 'b', 'a', 'c', 'a', 'd'];
var element = 'a';
var idx = array.lastIndexOf(element);
while (idx != -1) {
indices.push(idx);
idx = (idx > 0 ? array.lastIndexOf(element, idx - 1) : -1);
}
console.log(indices);
// [4, 2, 0]
Der Fall idx == 0
muss hier separat behandelt werden, weil das Element immer gefunden wird, unabhängig vom fromIndex
Parameter, falls es das erste Element im Feld ist. Das ist der Unterschieder zur indexOf
Methode.
Polyfill
lastIndexOf
wurde dem ECMA-262-Standard in der fünften Edition hinzugefügt; sie könnte daher nicht in allen Browsern verfügbar sein. Der Fehler kann umgangen werden, indem der folgende Code zu Beginn eines Skriptes eingesetzt wird. Dies ermöglicht die Verwendung von lastIndexOf
, auch wenn die Methode nativ nicht unterstützt wird. Dieser Algorithmus stimmt mit dem überein, was in ECMA-262 der 5. Edition, spezifiziert wurde, unter der Annahme, dass Object
, TypeError
, Number
, Math.floor
, Math.abs
, und Math.min
ihre originalen Werte haben.
// Production steps of ECMA-262, Edition 5, 15.4.4.15
// Reference: http://es5.github.io/#x15.4.4.15
if (!Array.prototype.lastIndexOf) {
Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {
'use strict';
if (this === void 0 || this === null) {
throw new TypeError();
}
var n, k,
t = Object(this),
len = t.length >>> 0;
if (len === 0) {
return -1;
}
n = len - 1;
if (arguments.length > 1) {
n = Number(arguments[1]);
if (n != n) {
n = 0;
}
else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
for (k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); k >= 0; k--) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
};
}
Erneute Anmerkung: Diese Implementation zielt auf eine absolute Kompatibilität von lastIndexOf
mit Firefox und der SpiderMonkey JavaScript Umgebung aus, inklusive einigen Fällen, welche wohl Grenzfälle sind. Beim Vorhaben diese Funktion in eigenen Applikationen zu verwenden, ist eine Berechnung von from
mit weniger komplizierten Code möglich, wenn diese Fälle ignoriert werden.
Spezifikationen
Spezifikation | Status | Kommentar |
---|---|---|
ECMAScript 5.1 (ECMA-262) Die Definition von 'Array.prototype.lastIndexOf' in dieser Spezifikation. |
Standard | Initiale Definition. Implementiert in JavaScript 1.6. |
ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Array.prototype.lastIndexOf' in dieser Spezifikation. |
Standard | |
ECMAScript (ECMA-262) Die Definition von 'Array.prototype.lastIndexOf' in dieser Spezifikation. |
Lebender Standard |
Browserkompatibilität
BCD tables only load in the browser
Kompatibilitätshinweise
- Beginnend mit Firefox 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44), gibt diese Methode nicht mehr
-0 zurück
. Zum Beispiel wird[0].lastIndexOf(0, -0)
immer+0
zurückgeben (Bug 1242043).