Finding elements from the beginning #
Finding an element that satisfies some condition in an Array
is a common task and is done with the find
and findIndex
methods on Array.prototype
and the various TypedArray prototypes. Array.prototype.find
takes a predicate and returns the first element in the array for which that predicate returns true
. If the predicate doesn't return true
for any element, the method returns undefined
.
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}];
inputArray.find((element) => element.v % 2 === 0);
// → {v:2}
inputArray.find((element) => element.v % 7 === 0);
// → undefined
Array.prototype.findIndex
works similarly, except it returns the index when found, and -1
when not found. The TypedArray versions of find
and findIndex
work exactly the same, with the only difference being that they operate on TypedArray instances instead of Array instances.
inputArray.findIndex((element) => element.v % 2 === 0);
// → 1
inputArray.findIndex((element) => element.v % 7 === 0);
// → -1
Finding elements from the end #
What if you want to find the last element in the Array
? This use case often naturally arises, such as choosing to deduplicate multiple matches in favor of the last element, or knowing ahead of time that the element is likely to be near the end of the Array
. With the find
method, one solution is to first reverse the input, like so:
inputArray.reverse().find(predicate)
However, that reverses the original inputArray
in-place, which is sometimes undesirable.
With the findLast
and findLastIndex
methods, this use case can be solved directly and ergonomically. They behave exactly as their find
and findIndex
counterparts, except they start their search from the end of the Array
or TypedArray.
const inputArray = [{v:1}, {v:2}, {v:3}, {v:4}, {v:5}];
inputArray.findLast((element) => element.v % 2 === 0);
// → {v:4}
inputArray.findLast((element) => element.v % 7 === 0);
// → undefined
inputArray.findLastIndex((element) => element.v % 2 === 0);
// → 3
inputArray.findLastIndex((element) => element.v % 7 === 0);
// → -1
findLast
and findLastIndex
support #
- Chrome: supported since version 97
- Firefox: no support
- Safari: partially supported
- Node.js: no support
- Babel: supported