Baseline Widely available
El método lastIndexOf()
devuelve el último Ãndice en el que un cierto elemento puede encontrarse en el arreglo, ó -1
si el elemento no se encontrara. El arreglo es recorrido en sentido contrario, empezando por el Ãndice fromIndex
.
const animals = ["Dodo", "Tiger", "Penguin", "Dodo"];
console.log(animals.lastIndexOf("Dodo"));
// Expected output: 3
console.log(animals.lastIndexOf("Tiger"));
// Expected output: 1
Sintaxis
arr.lastIndexOf(searchElement) arr.lastIndexOf(searchElement, fromIndex)Parámetros
searchElement
Elemento a encontrar en el arreglo.
fromIndex
Opcional
El Ãndice en el que empieza la búsqueda en sentido contrario. Por defecto la longitud del arreglo menos uno (arr.length - 1
), es decir, todo el arreglo será recorrido. Si el Ãndice es mayor o igual que la longitud del arreglo, todo el arreglo será recorrido. Si es un valor negatigo, se usará como inicio del desplazamiento el final del arreglo. Darse cuenta que aún cuando el Ãndice es negativo, el arreglo todavÃa será recorrido desde atrás hacia delante. Si el Ãndice calculado es menor de 0
, se devolverá -1
, es decir, el arreglo no será recorrido.
El último Ãndice del elemento en el arreglo; -1
si no se encuentra.
lastIndexOf
compara searchElement
con los elementos del arreglo usando igualdad estricta (el mismo método es usado para la ===, operador triple igualdad).
lastIndexOf
El siguiente ejemplo usa lastIndexOf
para encontrar valores en un arreglo.
var array = [2, 5, 9, 2];
array.lastIndexOf(2); // 3
array.lastIndexOf(7); // -1
array.lastIndexOf(2, 3); // 3
array.lastIndexOf(2, 2); // 0
array.lastIndexOf(2, -2); // 0
array.lastIndexOf(2, -1); // 3
Encontrar todas las apariciones de un elemento
El siguiente ejemplo uses lastIndexOf
encuentra todos los Ãndices de un elemento en un arreglo dado, usando push
añadiéndolos a otro arreglo como elementos encontrados.
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]
Darse cuenta que en este caso tenemos que tratar idx == 0
de forma separada por que el elemento siempre será encontrado independiemente del valor del parámetro fromIndex
si este es el primer elemento del arreglo. Diferente de como se trata en el método indexOf
.
lastIndexOf
fue añadido al estándar ECMA-262 en la 5ª edición; por tanto puede que no este presente en otras implementaciones del estándar. Puedes solucionarlo escribiendo el siguiente código al principio de tus scripts, pudiendo usar lastIndexOf
en implementaciones que no tiene soporte de forma nativa. Este algoritmo es exactamente el especificado en ECMA-262, 5ª edición, suponiendo que Object
, TypeError
, Number
, Math.floor
, Math.abs
, y Math.min
tienen sus valores originales.
// Pasos de producción de ECMA-262, Edición 5, 15.4.4.15
// Referencia: 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;
};
}
De nuevo, darse cuenta que esta implementación tiene como objeto la completa compatibilidad con lastIndexOf
en Firefox y el motor SpiderMonkey JavaScript, en particular en varios casos que son posiblemente extremos. Si pretendes usar esta funcionalidad en aplicaciones reales, es posible que puedes calcular from
con código menos complejo si ignoras estos casos.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4