find() Methode gibt einen Wert des Arrays, wenn ein Element des Arrays die mitgelieferte Testfunktion erfüllt. Ansonsten wird undefined zurückegeben.findIndex() Methode, die den Index eines gefundenen Elements anstatt dessen Wert zurück gibt.Syntax
arr.find(callback[, thisArg])
Parameter
callback- Funktion, die für jeden Wert des Arrays ausgeführt wird. Sie nimmt drei Argumente:
element- Das aktuelle verarbeitete Element in dem Array.
index- Der Index des aktuell verarbeiteten Elements in dem Array.
array- Das Array, mit dem
findaufgerufen wurde.
thisArg- Optional. Objekt welche als this verwendet wird beim Ausführen der callback Funktion.
Rückgabewert
Ein Wert aus dem Array, wenn ein Element den Test besteht, anderfalls undefined.
Beschreibung
Die find Methode führt für jedes Element des Arrays die callback Funktion aus, bis ein Element gefunden wurde, für das die callback Funktion true zurückliefert.
Wenn ein solches Element gefunden wurde, gibt find den Wert dieses Elements sofort zurück. Ansonsten liefert find undefined zurück. Die callback Funktion wird nur für Indizes des Arrays aufgerufen, die einen Wert besitzen. Sie wird nicht für gelöschte Indizes oder für Indizes ohne zugewiesenen Wert aufgerufen.
Die callback Funktion nimmt drei Argumente: Den Wert des Elements, den Index des Elements und das Array, das durchlaufen wird.
Wenn thisArg angegeben in find angegeben ist, wird es als this für jeden Aufruf der callback Funktion verwendet. Wenn es nicht angegeben wurde, wird undefined verwendet.
find wandelt das ursprüngliche Array nicht ab.
Die Anzahl der zu durchlaufenden Elemente in der find Methode werde vor dem ersten Aufruf der callback Funktion gesetzt. Elemente, die nach dem find Aufruf hinzugefügt wurden, werden nicht von der callback Funktion behandelt.
Wenn ein noch nicht durchlaufenes Element des Arrays von einer callback Funktion geändert wird, wird dieser geänderte Wert der callback Funktion übergeben. Die callback Funktionen bekommen immer den Wert der zum Zeitpunkt des besuchens eines Elementes verfügbar ist. Gelöschte Elemente werden nicht angeschaut.
Beispiele
Beispiel: Finden eines Objektes in einem Array anhand seiner Properties
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 }
Beispiel: Finden einer Primzahl in einem Array
In folgendem Beispiel wird eine Element des Array gefunden, wenn es eine Primzahl ist. Wenn keine Primzahl vorhanden ist liefert isPrime undefined zurück.
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, not found
console.log([4, 5, 8, 12].find(isPrime)); // 5
Polyfill
Diese Methode wurde in der EMCAScript 2015 Spezifikation hinzugefügt und ist nicht in allen JavaScript Implementationen vorhanden. Jedoch kann man mit folgendem Codeausschnitt einen polyfill für Array.prototype.find erstellen:
if (!Array.prototype.find) {
Array.prototype.find = 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;
};
}
Spezifikationen
| Spezifikation | Status | Kommentar |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Array.prototype.find' in dieser Spezifikation. |
Standard | Initiale Definition. |
| ECMAScript 2017 Draft (ECMA-262) Die Definition von 'Array.prototype.find' in dieser Spezifikation. |
Entwurf |
Browser Kompabilität
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | 45.0 | 25.0 (25.0) | Nicht unterstützt | Nicht unterstützt | 7.1 |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | Nicht unterstützt | Nicht unterstützt | 25.0 (25.0) | Nicht unterstützt | Nicht unterstützt | iOS 8 |