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
findwerd aangeroepen.
thisArg- Optioneel. Object om voor
thiste 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 |