Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Array.prototype.find()

La méthode find() renvoie une valeur contenue dans le tableau si un élément du tableau respecte une condition donnée par la fonction de test passée en argument. Sinon, la valeur undefined est renvoyée.

function seuil(element) {
  return element >= 15;
}

[12, 5, 8, 130, 44].find(seuil); // 130

Voir aussi la méthode findIndex() qui renvoie l'index de l'élément trouvé et non sa valeur.

Syntaxe

arr.find(callback[, thisArg])

Paramètres

callback
Fonction à exécuter sur chaque valeur du tableau, elle prend 3 arguments :
element
L'élément actuellement traité dans le tableau.
index
L'index de l'élément actuellement traité dans le tableau
array
Le tableau pour lequel la méthode find a été appelée.
thisArg
Ce paramètre est optionnel. Objet à utiliser en tant que this lorsque la fonction callback est exécutée.

Valeur de retour

Une valeur d'un élément du tableau si un élément réussit le test, sinon undefined.

Description

La méthode find exécute la fonction callback une fois pour chaque élément présent dans le tableau jusqu'à ce qu'elle retourne une valeur vraie (qui peut être convertie en true). Si un élément est trouvé, find retourne immédiatement la valeur de l'élément. Autrement, find retourne undefined. La méthode callback est seulement appelée pour les index du tableau pour lesquels on dispose d'une valeur. Elle n'est pas appelée pour les index supprimés ou pour ceux qui n'ont pas de valeur.

La méthode callback est appelée avec trois arguments : la valeur de l'élément, l'index de l'élément, et l'objet correspondant au tableau traversé.

Si le paramètre thisArg est fourni à find, il sera utilisé comme le this pour chaque exécution de la fonction callback. S'il n'est pas fourni, alors undefined sera utilisé.

find ne modifie pas le tableau à partir duquel elle est appelée.

L'intervalle des éléments inspectés par find est défini avant la première exécution de callback. Les éléments ajoutés au tableau après l'appel à find ne seront pas inspectés par la fonction callback. Si un élément existant est modifié avant le passage du callback, alors la valeur traitée par le callback sera celle présente lors du passage de find sur son index. Les éléments supprimés ne seront pas traités.

Exemples

Trouver un objet dans un tableau grâce à une de ses propriétés

var inventaire = [
  {nom: 'pommes', quantité: 2},
  {nom: 'bananes', quantité: 0},
  {nom: 'cerises', quantité: 5},
];

function trouveCerises(fruit) {
  return fruit.nom === 'cerises';
}

console.log(inventaire.find(trouveCerises));
// { nom: 'cerises', quantité: 5}

Trouver un nombre premier dans un tableau

Dans l'exemple suivant, on cherche un nombre premier parmi les éléments d'un tableau (ou retourne undefined s'il n'y en a pas ).

function estPremier(element, index, array) {
    var début = 2;
    while (début <= Math.sqrt(element)) {
        if (element % début ++ < 1) return false;
    }
    return (element > 1);
}

console.log( [4, 6, 8, 12].find(estPremier) ); // undefined, rien trouvé
console.log( [4, 5, 8, 12].find(estPremier) ); // 5

Prothèse d'émulation (polyfill)

Cette méthode a été ajoutée avec la spécification ECMAScript 2015 (appelée également ES6) et n'est peut-être pas disponible pour toutes les implémentations de JavaScript. Cependant, vous pouvez émuler le fonctionnement d'Array.prototype.find grâce au code suivant :

if (!Array.prototype.find) {
  Object.defineProperty(Array.prototype, "find", {
    value: function(predicate) {
     'use strict';
     if (this == null) {
       throw new TypeError('Array.prototype.find 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 value;
       }
     }
     return undefined;
    }
  });
}

Mieux vaut éviter d'utiliser cette prothèse si Object.defineProperty() n'est pas disponible car il n'y a pas d'autre moyen de rendre la méthode non énumérable.

Spécifications

Spécification État Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Array.prototype.find' dans cette spécification.
Standard Définition initiale
ECMAScript 2017 Draft (ECMA-262)
La définition de 'Array.prototype.find' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Edge Opera Safari
Support simple 45 25.0 (25.0) Pas de support 12 32.0 7.1
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Edge Opera Mobile Safari Mobile
Support simple Pas de support Pas de support 25.0 (25.0) Pas de support 12 Pas de support 8.0

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, goofy_bz, Fredchat, ferncoder
 Dernière mise à jour par : SphinxKnight,