De find()
-methode geeft een waarde terug uit de array wanneer een element in de array aan de opgegeven testfunctie voldoet. In andere gevallen wordt undefined
teruggegeven.
Zie ook de findIndex()
-methode, die de index van het gevonden element in de array teruggeeft in plaats van de waarde zelf.
Syntaxis
arr.find(callback[, thisArg])
Parameters
callback
- Functie om voor alle waarden in de array uit te voeren, die drie argumenten accepteert:
element
- Het huidige element uit de array dat wordt verwerkt.
index
- De index van het huidige element uit de array dat wordt verwerkt.
array
- De array waarop
find
werd aangeroepen.
thisArg
- Optioneel. Object om voor
this
te gebruiken tijdens het uitvoeren vancallback
.
Retourwaarde
Een waarde in de array als een element aan de testfunctie voldoet, anders undefined
.
Beschrijving
De find
-methode voert de callback
-functie eenmaal per aanwezig element in de array uit, totdat er één wordt gevonden waarvoor callback
een waarde true teruggeeft. Als een dergelijk element wordt gevonden, geeft find
direct de waarde van dat element terug. In andere gevallen geeft find
undefined
terug nadat alle elementen uit de array zijn doorlopen. callback
wordt alleen aangeroepen voor indexen van de array waaraan een waarde is toegekend; de functie wordt niet aangeroepen voor indexen die zijn verwijderd of waaraan nooit een waarde is toegekend.
callback
wordt aangeroepen met drie argumenten: de waarde van het element, de index van het element en het Array-object waarover wordt geïtereerd.
Als een thisArg
-parameter aan find
wordt meegegeven, wordt deze voor elke aanroep van callback
gebruikt als de waarde voor this
. Als er geen waarde voor is opgegeven, wordt undefined
gebruikt.
find
wijzigt niet de array waarop de methode wordt aangeroepen.
Het bereik van de elementen die door find
worden verwerkt, wordt ingesteld voor de eerste aanroep van callback
. Elementen die aan de array worden toegevoegd nadat de aanroep naar find
begint, worden niet door callback
bezocht. Als een bestaand, maar nog niet bezocht element van de array door callback
wordt gewijzigd, zal de waarde van dit element die aan callback
wordt meegegeven de waarde worden die eraan was toegekend op het moment dat find
de index van dat element bereikte; verwijderde elementen worden niet bezocht.
Voorbeelden
Een object in een array zoeken via een van zijn eigenschappen
var voorraad = [ {naam: 'appels', aantal: 2}, {naam: 'bananen', aantal: 0}, {naam: 'kersen', aantal: 5} ]; function zoekKersen(fruit) { return fruit.naam === 'kersen'; } console.log(voorraad.find(zoekKersen)); // { naam: 'kersen', aantal: 5 }
Een priemgetal in een array zoeken
Het volgende voorbeeld zoekt een element in de array dat een priemgetal is (of geeft undefined
terug als er geen priemgetal is).
function isPriem(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(isPriem)); // niet gedefinieerd, niet gevonden console.log([4, 5, 8, 12].find(isPriem)); // 5
Polyfill
Deze methode is aan de ECMAScript 2015-specificatie toegevoegd en is mogelijk nog niet in alle JavaScript-implementaties beschikbaar. Met de volgende snippet kan Array.prototype.find
echter worden ‘gepolyfilled’:
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; }; }
Specificaties
Specificatie | Status | Opmerking |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Array.prototype.find' in that specification. |
Standard | Eerste definitie. |
ECMAScript 2017 Draft (ECMA-262) The definition of 'Array.prototype.find' in that specification. |
Draft |
Browsercompatibiliteit
Functie | Chrome | Firefox (Gecko) | Internet Explorer | Edge | Opera | Safari |
---|---|---|---|---|---|---|
Basisondersteuning | 45.0 | 25.0 (25.0) | No support | 12 | No support | 7.1 |
Functie | Android | Chrome voor Android | Firefox Mobile (Gecko) | IE Mobile | Edge | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basisondersteuning | No support | No support | 25.0 (25.0) | No support | 12 | No support | 8.0 |