--- title: Array.prototype.find() slug: Web/JavaScript/Reference/Global_Objects/Array/find translation_of: Web/JavaScript/Reference/Global_Objects/Array/find original_slug: Web/JavaScript/Referencia/Objectes_globals/Array/find ---
{{JSRef}}

El mètode find() retorna un valor valor pertanyent a l'array si un element de l'array satisfà la funció de testeig donada. En cas contrari retornarà {{jsxref("undefined")}}.

Vegeu també el mètode {{jsxref("Array.findIndex", "findIndex()")}}, que retorna la posició a la qual s'ha trobat l'element que satisfà la funció de testeig, en comptes del seu valor.

Sintaxi

arr.find(callback[, thisArg])

Paràmetres

callback
Funció que s'executarà per a cada valor de l'array, rep tres arguments:
element
L'element de l'array que s'està processant actualment.
posició
La posició de l'array que s'està processant actualment.
array
L'array des del qual s'ha cridat el mètode find.
thisArg
Opcional. L'objecte a utilitzar com a this mentre s'executi callback.

Descripció

El mètode find executa la funció callback un cop per a cada element present a l'array fins que trobi un on callback retorni true. Si es troba aquest element el mètode find retorna el valor de l'element trobat immediatament. En cas contrari find retornarà {{jsxref("undefined")}}. callback només serà invocada per a posicions de l'array que tinguin valors assignats; no serà invoada per a posicions que s'hagin eliminat o que mai hagin tingut assignat un valor.

La invocaicó de callback té tres arguments: el valor de l'element, la posició de l'element i l'objecte array que està sent recorregut.

Si es proporciona el paràmetre thisArg al cridar el mètode find, aquest serà utilitzat com a this per a cada invocació del mètode callback. En cas de no ser proporcionat s'utilitzarà {{jsxref("undefined")}}.

find no mutarà l'array des del que es crida.

El rang d'elemnets que find processarà es determina abans de la primera invocació a callback. Els elements afegits a l'array després de la crida a find no seran visitats per callback. Si un element existent, no visitat encara, rep un altre valor, el valor percebut per callback serà aquell que tingui l'element al ser visitat; els elements visitats no són visitats.

Exemples

Trobar un objecte en un array segons el valor d'una propietat

var inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];

function findCherries(fruit) {
    return fruit.name === 'cherries';
}

console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }

Trobar un nombre primer en un array

L'exemple següent troba un element dins l'array el valor del qual sigui un nombre primer (o bé retorna {{jsxref("undefined")}} si no n'hi ha cap).

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

console.log([4, 6, 8, 12].find(isPrime)); // undefined, no trobat
console.log([4, 5, 8, 12].find(isPrime)); // 5

Polyfill

Aquest mètode es va afegira la especificació 2015 de l'ECMAScript i pot no estar disponible encara en algunes implementacions de JavaScript. Tot i així es pot utilitzar el codi següent per a utilitzar-lo en entorns on no estigui disponible:

if (!Array.prototype.find) {
  Array.prototype.find = function(predicate) {
    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;
  };
}

Especificacions

Especificació Estat Comentaris
{{SpecName('ES6', '#sec-array.prototype.find', 'Array.prototype.find')}} {{Spec2('ES6')}} Definició inicial.
{{SpecName('ESDraft', '#sec-array.prototype.find', 'Array.prototype.find')}} {{Spec2('ESDraft')}}  

Compatibilitat amb navegadors

{{CompatibilityTable}}
Característica Chrome Firefox (Gecko) Internet Explorer Edge Opera Safari
Suport bàsic {{CompatChrome(45.0)}} {{CompatGeckoDesktop("25.0")}} {{CompatNo}} 12 {{CompatNo}} {{CompatSafari("7.1")}}
Característica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Edge Opera Mobile Safari Mobile
Suport bàsic {{CompatNo}} {{CompatNo}} {{CompatGeckoMobile("25.0")}} {{CompatNo}} 12 {{CompatNo}} 8.0

Vegeu també