find()
metodu parametre olarak verilen, true/false değer döndüren test fonksiyonunu karşılayan dizi içerisindeki ilk elemanın değerini döndürür. Aksi halde undefined
döndürür.
function yeterinceBuyuk(eleman) {
return eleman >= 15;
}
[12, 5, 8, 130, 44].find(yeterinceBuyuk); // 130
Ayrıca findIndex()
metoduna bakınız, bu metod dizi içerisinde bulunan elemanın değeri yerine indeksini döndürür.
Dizi içerisindeki elemanın pozizyonunu bulmak ya da var olup olmadığına bakmak için Array.prototype.indexOf()
veya Array.prototype.includes()
kullanabilirsiniz.
Sözdizim
arr.find(gericagrim[, thisArg])
Parametreler
gericagrim
- Dizi içerisindeki her bir değer için çalıştırılacak fonksiyon, üç parametre alır:
eleman
- Dizideki işlenen mevcut eleman.
indeks
- Dizideki işlenen mevcut elemanın indeksi.
dizi
find
metodunun çağırıldığı dizi.
thisArg
Optional
-
gericagrim
çalıştığındathis
olarak kullanılan nesne.
Dönüş değeri
Eğer test doğrulanırsa dizi içerisindeki bir değer; değilse, undefined
.
Açıklama
find
metodu gericagrim
fonksiyonu doğru bir değer döndürene kadar her bir indeks için bir sefer gericagrim
fonksiyonunu çalıştırır. Eğer böyle bir eleman bulunduysa, find
derhal bu elemanın değerini döndürür. Aksi halde, find
undefined
döndürür. gericagrim
0
dan length - 1
dahil olmak üzere değer atanan ya da atanmayan dizinin her bir elemanı için çağırılır. Bu, aralıklı diziler için sadece değer atanan indeksleri ziyaret eden diğer metodlardan daha verimsiz olduğu anlamına gelmektedir.
gericagrim
üç parametre ile çağırılır: dizi elemanının değeri, dizi elemanının indeksi, ve geçilen dizi nesnesi.
Eğer bir thisArg
parametresi find
için sağlanırsa, bu parametre gericagrim
fonksiyonunun her çağırılışı için this
olarak kullanılacaktır. Eğer sağlanmazsa, undefined
kullanılır.
find
üzerinde çağırıldığı diziyi değiştirmez.
find
tarafından işlenilen elemanların aralığı gericagrim
fonksiyonunun ilk çağırılışından önce atanır. find
çağırılmaya başlandığından sonra diziye eklenen elemanlar gericagrim
tarafından ziyaret edilmeyecektir. Eğer varolan, ziyaret edilmeyen eleman gericagrim
tarafından değiştirilirse, bu elemanı ziyaret eden gericagrim
fonkisyonuna aktarılan değeri find
metodunun bu elemanın indeksini ziyaret edeceği andaki değer olacaktır; silenen elemanlar yine de ziyaret edilecektir.
Örnekler
Dizi içerisindeki nesneyi bir özelliğinden bulmak
var envanter = [
{isim: 'elma', miktar: 2},
{isim: 'muz', miktar: 0},
{isim: 'kiraz', miktar: 5}
];
function kirazlariBul(meyve) {
return meyve.isim === 'kiraz';
}
console.log(envanter.find(kirazlariBul));
// { isim: 'kiraz', miktar: 5 }
Dizi içerisindeki bir asal sayıyı bulmak
Aşağıdaki örnek dizi içerisindeki bir asal sayı olan elemanı bulur (ya da eğer asal sayı yoksa undefined
döndürür).
function asalMi(eleman, indeks, dizi) {
var baslangic = 2;
while (baslangic <= Math.sqrt(eleman)) {
if (eleman % baslangic++ < 1) {
return false;
}
}
return eleman > 1;
}
console.log([4, 6, 8, 12].find(asalMi)); // undefined, bulunamadı
console.log([4, 5, 8, 12].find(asalMi)); // 5
Aşağıdaki örnek varolmayan ve silinen elemanların ziyaret edildiğini ve gericağrım fonksiyonuna gönderilen değerin ziyaret edildikleri andaki değerleri olduğunu gösterir.
// İndeks 2, 3 ve 4 için elemanı bulunmayan bir dizi tanımlar
var a = [0,1,,,,5,6];
// Sadece değer atanmış olanlar değil, tüm indeksleri gösterir
a.find(function(deger, indeks) {
console.log('Ziyaret edilen indeks ' + indeks + ' ve değeri ' + deger);
});
// Silinenler dahil, bütün indeksleri gösterir
a.find(function(deger, indeks) {
// İndeksi 5 olan elamanı birinci iterasyonda siler
if (indeks == 0) {
console.log('a[5] siliniyor ve değeri ' + a[5]);
delete a[5];
}
// İndeksi 5 olan elaman silinse bile yine de ziyaret edilir
console.log('Ziyaret edilen indeks ' + indeks + ' ve değeri ' + deger);
});
Polyfill
Bu metod ECMAScript 2015 spesifikasyonuna eklenmiştir ve tüm JavaScript implementasyonlarında kullanıma hazır olmayabilir. Fakat, aşağıdaki kod parçacığı ile Array.prototype.find
polyfill yapabilirsiniz:
// https://tc39.github.io/ecma262/#sec-array.prototype.find
if (!Array.prototype.find) {
Object.defineProperty(Array.prototype, 'find', {
value: function(predicate) {
// 1. Let O be ? ToObject(this value).
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
var o = Object(this);
// 2. Let len be ? ToLength(? Get(O, "length")).
var len = o.length >>> 0;
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
if (typeof predicate !== 'function') {
throw new TypeError('predicate must be a function');
}
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
var thisArg = arguments[1];
// 5. Let k be 0.
var k = 0;
// 6. Repeat, while k < len
while (k < len) {
// a. Let Pk be ! ToString(k).
// b. Let kValue be ? Get(O, Pk).
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
// d. If testResult is true, return kValue.
var kValue = o[k];
if (predicate.call(thisArg, kValue, k, o)) {
return kValue;
}
// e. Increase k by 1.
k++;
}
// 7. Return undefined.
return undefined;
}
});
}
Eğer Object.defineProperty
desteği bulunmayan tamamen eskimiş JavaScript motorları için ihtiyacınız varsa, Array.prototype
metodlarını polyfill yapmamanız en doğrusudur, çünkü bu metodlar numaralandırılabilir olmayan metodlardır.
Spesifikasyonlar
Spesifikasyon | Durum | Açıklama |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Array.prototype.find' in that specification. |
Standard | İlk tanım. |
ECMAScript (ECMA-262) The definition of 'Array.prototype.find' in that specification. |
Living Standard |
Tarayıcı uyumluluğu
BCD tables only load in the browser
Ayrıca bakınız
Array.prototype.findIndex()
– bulur ve indeksi döndürürArray.prototype.filter()
– eşleşen bütün elemanları bulurArray.prototype.every()
– bütün elemanları birlikte test eder