--- 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 ---
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.
arr.find(callback[, thisArg])
callback
element
posició
array
find
.thisArg
this
mentre s'executi callback
.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.
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 }
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
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; }; }
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')}} |
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 |