Trouver des éléments dans les `Array`s et les TypedArrays
Trouver des éléments depuis le début
Trouver un élément qui satisfait une condition dans un Array
est une tâche courante et se fait avec les méthodes find
et findIndex
sur Array.prototype
et les divers prototypes TypedArray. Array.prototype.find
prend un prédicat et retourne le premier élément dans le tableau pour lequel ce prédicat retourne true
. Si le prédicat ne retourne true
pour aucun élément, la méthode retourne 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
fonctionne de manière similaire, sauf qu'elle retourne l'index lorsque trouvé, et -1
lorsque non trouvé. Les versions TypedArray de find
et findIndex
fonctionnent exactement de la même manière, avec la seule différence qu'elles opèrent sur des instances TypedArray à la place des instances Array.
inputArray.findIndex((element) => element.v % 2 === 0);
// → 1
inputArray.findIndex((element) => element.v % 7 === 0);
// → -1
Trouver des éléments depuis la fin
Que faire si vous voulez trouver le dernier élément dans le Array
? Ce cas d'utilisation survient souvent naturellement, comme par exemple en choisissant de dédupliquer plusieurs correspondances en faveur du dernier élément, ou en sachant à l'avance que l'élément est probablement près de la fin du Array
. Avec la méthode find
, une solution consiste à inverser d'abord l'entrée, comme ceci :
inputArray.reverse().find(predicate)
Cependant, cela inverse le inputArray
original sur place, ce qui est parfois indésirable.
Avec les méthodes findLast
et findLastIndex
, ce cas d'utilisation peut être résolu directement et de manière ergonomique. Elles se comportent exactement comme leurs homologues find
et findIndex
, sauf qu'elles commencent leur recherche à partir de la fin du Array
ou 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