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
find
aufgerufen 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 |