JavaScript Array lastIndexOf()

The JavaScript Array lastIndexOf() method returns the last index at which a given element can be found in the array, or -1 if it is not present.

The syntax of the lastIndexOf() method is:

arr.lastIndexOf(searchElement, fromIndex)

Here, arr is an array.


lastIndexOf() Parameters

The lastIndexOf() method takes in:

  • searchElement - The element to locate in the array.
  • fromIndex (optional) - The index to start searching backwards. By default it is array.length - 1.

Return value from lastIndexOf()

  • Returns the last index of the element in the array if it is present at least once.
  • Returns -1 if the element is not found in the array.

Note: lastIndexOf() compares searchElement to elements of the Array using strict equality (similar to triple-equals operator or ===).


Example 1: Using lastIndexOf() method

var priceList = [10, 8, 2, 31, 10, 1, 65];

// lastIndexOf() returns the last occurance
var index1 = priceList.lastIndexOf(31);
console.log(index1); // 3

var index2 = priceList.lastIndexOf(10);
console.log(index2); // 4

// second argument specifies the backward search's start index
var index3 = priceList.lastIndexOf(10, 3);
console.log(index3); // 0

// lastIndexOf returns -1 if not found
var index4 = priceList.lastIndexOf(69.5);
console.log(index4); // -1

Output

3
4
0
-1

Notes:

  • If fromIndex < 0, the index is calculated backwards. For example, -1 denotes the last element and so on.
  • If calculated index i.e. array.length + fromIndex < 0, -1 is returned.

Example 2: Finding All the Occurrences of an Element

function findAllIndex(array, element) {
  indices = [];
  var currentIndex = array.lastIndexOf(element);
  while (currentIndex != -1) {
    indices.push(currentIndex);
    if (currentIndex > 0) {
      currentIndex = array.lastIndexOf(element, currentIndex - 1);
    } else {
      currentIndex = -1;
    }
  }
  return indices;
}

var priceList = [10, 8, 2, 31, 10, 1, 65, 10];

var occurance1 = findAllIndex(priceList, 10);
console.log(occurance1); // [ 7, 4, 0 ]

var occurance2 = findAllIndex(priceList, 8);
console.log(occurance2); // [ 1 ]

var occurance3 = findAllIndex(priceList, 9);
console.log(occurance3); // []

Output

[ 7, 4, 0 ]
[ 1 ]
[]

Here, the if (currentIndex > 0) statement is added so that occurrences at index 0 won't give -1 for currentIndex - 1. This would lead to search from the back again and the program would be caught in an infinite loop.


Example 3: Finding If Element exists else Adding the Element

function checkOrAdd(array, element) {
  if (array.lastIndexOf(element) === -1) {
    array.push(element);
    console.log("Element not Found! Updated the array.");
  } else {
    console.log(element + " is already in the array.");
  }
}

var parts = ["Monitor", "Keyboard", "Mouse", "Speaker"];

checkOrAdd(parts, "CPU"); // Element not Found! Updated the array.
console.log(parts); // [ 'Monitor', 'Keyboard', 'Mouse', 'Speaker', 'CPU' ]

checkOrAdd(parts, "Mouse"); // Mouse is already in the array.

Output

Element not Found! Updated the array.
[ 'Monitor', 'Keyboard', 'Mouse', 'Speaker', 'CPU' ]
Mouse is already in the array.

Recommended Readings: