Difference Between indexOf and findIndex function of array
Simple - What kind of array structure are you using?
- If array of objects,
findIndex()
; - Else,
indexOf()
.
"I want to find the index in an array of objects, with the key of "Orange".
let fruits = [
{ type: "Apple", quantity: 9 },
{ type: "Banana", quantity: 2},
{ type: "Orange", quantity: 8},
{ type: "Pear", quantity: 777}
];
let myIndex = fruits.findIndex(fruit => fruit.type === "Orange"); // Returns 2.
"I want to find the index in a simple array".
let fruits = [ "Apple", "Banana", "Pear", "Orange"];
let index = fruits.indexOf("Orange"); // Returns 3.
FindIndex is useful if you want to find the first element that matches to your predicate: In W3C's example, there are numbers and matches if the customer's age above or equals to 18.
var ages = [3, 10, 18, 20];
function checkAdult(age) {
return age >= 18;
}
console.log(ages.findIndex(checkAdult));
console:
2
You can find an exact element index with the indexOf function of Array, but you can't pass a predicate. It is faster if you want to find a specific element:
var ages = [3, 10, 18, 20];
console.log(ages.indexOf(10));
returns:
1
Index counting starts at 0, so the first element index is 0.
The main difference are the parameters of these functions:
Array.prototype.indexOf()
expects a value as first parameter. This makes it a good choice to find the index in arrays of primitive types (like string, number, or boolean).Array.prototype.findIndex()
expects a callback as first parameter. Use this if you need the index in arrays with non-primitive types (e.g. objects) or your find condition is more complex than just a value.
See the links for examples of both cases.