MDN will be in maintenance mode on Thursday September 21st, starting at 10 AM Pacific / 5 PM UTC, for about 1 hour.

This translation is incomplete. Please help translate this article from English.

find() metodu verilen 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ığında this 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 Latest Draft (ECMA-262)
The definition of 'Array.prototype.find' in that specification.
Living Standard  

Tarayıcı uyumluluğu

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support45 (Yes)25 No327.1
FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support (Yes) (Yes) (Yes)1 No (Yes)8

Ayrıca bakınız

Document Tags and Contributors

 Contributors to this page: ahalkaya
 Last updated by: ahalkaya,