Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.
El método lastIndexOf()
devuelve el último índice en el que un cierto elemento puede encontrarse en el array, o -1 si el elemento no se encontrara. El array es recorrido en sentido contrario, empezando por el índice fromIndex
.
Sintáxis
arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1])
Parámetros
searchElement
- Elemento a encontrar en el array.
fromIndex
- Opcional. El índice en el que empieza la búsqueda en sentido contrario. Por defecto la longitud del array menos uno, es decir, todo el array será recorrido. Si el índice es mayor o igual que la longitud del array, todo el array será recorrido. Si es un valor negatigo, se usará como inicio del desplazamiento el final del array. Darse cuenta que aún cuando el índice es negativo, el array todavía será recorrido desde atrás hacia delante. Si el índice calculado es menor de 0, se devolverá -1, es decir, el array no será recorrido.
Descripción
lastIndexOf
campara searchElement
con los elementos del array usando strict equality (el mismo método es usado para la ===, operador triple igualdad).
Ejemplos
Usando lastIndexOf
El siguiente ejemplo usa lastIndexOf
para encontrar valores en un array.
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 array dado, usando push
añadiéndolos a otro array 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 array. Diferente de como se trata en el método indexOf
.
Compatibilidad
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
, and Math.min
sus valores originales.
// Production steps of ECMA-262, Edition 5, 15.4.4.15 // Reference: https://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.
Especificaciones
Especificación | Estado | Comentario |
---|---|---|
ECMAScript 5.1 (ECMA-262) The definition of 'Array.prototype.lastIndexOf' in that specification. |
Standard | Definición inicial. Implementado en JavaScript 1.6. |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Array.prototype.lastIndexOf' in that specification. |
Standard | |
ECMAScript 2017 Draft (ECMA-262) The definition of 'Array.prototype.lastIndexOf' in that specification. |
Draft |
Compatibilidad con navegadores
Caracterísitica | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Soporte básico | (Yes) | (Yes) | 9 | (Yes) | (Yes) |
Característica | Android | Chrome para Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Soporte básico | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Notas
- Desde Firefox 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44), el método ya no devolverá
-0
. Por ejemplo,[0].lastIndexOf(0, -0)
no siempre devolverá+0
(bug 1242043).