¿Cómo encuentro la posición de la última aparición de un carácter en una cadena sin usar .lastIndexOf ()?

Recorrer cada personaje en la cadena como Aaron sugirió es el más rápido:

function lastIndexOf(str, char) { var i = str.length; for (; i > -1; i--) { if (str.charAt(i) === char) { return i; } } return -1; } 

También puede usar una función de reemplazo de expresiones regulares, aunque esto es más lento:

 function lastIndexOf(str, char) { var index = -1; str.replace(new RegExp(char + '[^' + char + ']*$'), function (str, offset) { index = offset; }); return index; } 

Esto coincide con cualquier letra “l” seguida de cero o más caracteres que no sean la letra “l”. Como no asignamos el valor de retorno de la llamada replace() a nada, se descarta, pero podemos usar el desplazamiento de coincidencia pasado a la función de reemplazo como queramos.

Si la cadena no contiene una coincidencia, nunca se llamará a la función de reemplazo.

Puede leer más sobre las funciones de reemplazo en MDC: https://developer.mozilla.org/en…

Bueno, la forma trivial sería recorrer los caracteres de la cadena hacia atrás, utilizando un bucle for y la propiedad de longitud de la cadena. Puede obtener el carácter en cada índice utilizando el método charAt () de la cadena. Deja de recorrer cuando encuentres el personaje correspondiente.

Según lo sugerido por Aaron Boodman y Ryan Grove, recorrer la palabra es una buena técnica.
Una forma más podría ser dividir la palabra por la letra requerida y restar la longitud del último fragmento.
Un ejemplo lo aclarará

  var word = "Hola"
 var position = word.length - word.split ("l"). pop (). length - 1

si la letra no existe, devuelve -1
Tenga en cuenta que la división puede funcionar incorrectamente en caracteres unicode, que pueden tener pares sustitutos. Por lo tanto, dividir posiblemente puede romper la palabra a lo largo de un par sustituto. En ese caso, usar charAt y bucle es más seguro como se sugiere en otras respuestas