La méthode findIndex()
renvoie l'indice d'un élément du tableau qui satisfait une condition donnée par une fonction. Si la fonction renvoie faux pour tous les éléments du tableau, le résultat vaut -1.
Voir également la méthode find()
qui renvoie la valeur (et non l'indice) d'un des éléments trouvés.
Syntaxe
arr.findIndex(callback[, thisArg])
Paramètres
callback
- Une fonction à exécuter sur chaque valeur du tableau. Cette fonction prend trois arguments :
élément
- L'élément du tableau qui doit être traité.
indice
- L'indice de l'élément du tableau en cours de traitement.
tableau
- Le tableau sur lequel a été appelé
findIndex
.
argumentThis
- L'objet à utiliser comme contexte
this
lorsque lecallback
est exécuté.
Valeur de retour
Un indice d'un élément du tableau qui réussit le test décrit, -1 sinon.
Description
La méthode findIndex
exécute la fonction callback
une fois pour chaque élément présent dans le tableau (le tableau est parcouru entre les indices 0
et length-1
compris) jusqu'à ce que callback
renvoie une valeur vraie. S'il existe un tel élément, findIndex
renverra immédiatement l'indice de l'élément concerné. Sinon, findIndex
renverra -1. À la différence des autres méthodes liées aux tableaux comme some()
, callback
est également appelée pour les index du tableau pour lequel aucun élément n'est défini.
callback
possède trois arguments : la valeur de l'élément, l'indice de l'élément et l'objet Array qui est parcouru
Si l'argument argumentThis
est fourni à la méthode findIndex
, il sera utilisé comme « contexte » this
pour chaque appel de callback
. S'il n'est pas fourni, undefined
sera utilisé.
findIndex
ne modifie pas le tableau sur laquelle elle est appelée.
Les éléments qui seront traités par findIndex
sont « récoltés » avant le premier appel de callback
. Tout élément qui sera ajouté au tableau après l'appel de findIndex
ne sera pas utilisé avec callback
. Si un élément existant, pas encore visité, est modifié par callback
, la valeur qui sera passé au callback
pour cet élément modifié sera celle que findIndex
utilise lorsqu'elle utilise l'indice de l'élément en question. Les éléments supprimés ne sont pas pris en considération.
Exemples
Trouver l'indice d'un nombre premier dans un tableau
L'exemple qui suit illustre comment trouver l'indice d'un élément qui est un nombre premier dans un tableau (ou qui renvoie -1 s'il n'y a pas de nombre premier).
function estPremier(élément, index, array) { var début = 2; while (début <= Math.sqrt(élément)) { if (élément % début++ < 1) { return false; } } return élément > 1; } console.log([4, 6, 8, 12].findIndex(estPremier)); // -1, aucun trouvé console.log([4, 6, 7, 12].findIndex(estPremier)); // 2
Prothèse d'émulation (polyfill)
Cette méthode fait partie de la spécification ECMAScript 6 et peut ne pas être présente pour toutes les implémentations JavaScript. Il est toutefois possible d'utiliser une couche d'émulation (ou polyfill) pour compléter Array.prototype.find
avec le fragment de code suivant :
if (!Array.prototype.findIndex) { Object.defineProperty(Array.prototype, 'findIndex', { value: function(predicate) { 'use strict'; if (this == null) { throw new TypeError('Array.prototype.findIndex called on null or undefined'); } if (typeof predicate !== 'function') { throw new TypeError('predicate must be a function'); } var list = Object(this); var length = list.length >>> 0; var thisArg = arguments[1]; var value; for (var i = 0; i < length; i++) { value = list[i]; if (predicate.call(thisArg, value, i, list)) { return i; } } return -1; }, enumerable: false, configurable: false, writable: false }); }
Spécifications
Spécification | État | Commentaires |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'Array.prototype.findIndex' dans cette spécification. |
Standard | Définition initiale. |
ECMAScript 2017 Draft (ECMA-262) La définition de 'Array.prototype.findIndex' dans cette spécification. |
Projet |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Edge | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Support simple | 45 | 25.0 (25.0) | (Oui) | Pas de support | (Oui) | 7.1 |
Fonctionnalité | Android | Chrome pour Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | Pas de support | Pas de support | 25.0 (25.0) | Pas de support | Pas de support | 8.0 |