- Konu sahibi
- #1
İçeriği verilen koşula uyan ilk nesneyi bulmak için
Burada
Bu örnekte birden fazla ürünün stoğu pozitif olsa bile yalnızca ilk uygun ürün döner. find(), tüm eşleşmeleri değil, ilk eşleşen nesneyi bulur. Tüm uygun nesneleri almak istiyorsanız
Aradığınız nesnenin gerçekten bulunduğunu kullanmadan önce kontrol edin. Eşleşme yoksa dönen değer
Bu kontrol, aranan
Hangi yöntemi kullanacağınız, nesnenin kendisine mi, konumuna mı yoksa yalnızca eşleşme bilgisine mi ihtiyaç duyduğunuza bağlıdır.
Örneğin yalnızca belirli bir kullanıcının var olup olmadığını kontrol etmek için nesnenin tamamını almanız gerekmez:
Bir nesneyi güncellemek için önce konumunu bulmanız gerekiyorsa
Arama koşulunda genellikle kesin eşitlik olan
Arama yapmadan önce verideki özelliğin adını ve türünü kontrol edin. Veri sayısal olarak kullanılacaksa karşılaştırmadan önce kontrollü biçimde sayıya dönüştürülebilir; ancak bu dönüşüm, geçersiz metinlerin yanlışlıkla eşleşmesine yol açmayacak şekilde yapılmalıdır.
Sonuç olarak, nesnenin kendisini bulmak için
find() kullanın. Dizi içinde örneğin id değeri 2 olan nesneyi aramak istiyorsanız koşulu bir geri çağırım işleviyle belirtin; eşleşme varsa nesne, yoksa undefined döner.
JavaScript:
const kullanicilar = [
{ id: 1, ad: "Ayşe", rol: "editör" },
{ id: 2, ad: "Mehmet", rol: "yazar" },
{ id: 3, ad: "Zeynep", rol: "yönetici" }
];
const kullanici = kullanicilar.find(kisi => kisi.id === 2);
console.log(kullanici);
// { id: 2, ad: "Mehmet", rol: "yazar" }
Burada
find(), dizinin elemanlarını sırayla kontrol eder. kisi.id === 2 koşulunu sağlayan ilk eleman bulunduğunda aramayı durdurur ve o nesnenin tamamını döndürür. Koşulu sağlayan hiçbir nesne yoksa sonuç undefined olur.Koşula göre nesne bulma
find() içindeki işlev, her nesne için çalıştırılır. Nesnenin birden fazla özelliğini karşılaştırabilir veya metin üzerinde başka bir koşul uygulayabilirsiniz:
JavaScript:
const urunler = [
{ kod: "A01", ad: "Klavye", stok: 4 },
{ kod: "B02", ad: "Fare", stok: 0 },
{ kod: "C03", ad: "Kulaklık", stok: 8 }
];
const stoktaOlan = urunler.find(urun => urun.stok > 0);
console.log(stoktaOlan);
// { kod: "A01", ad: "Klavye", stok: 4 }
Bu örnekte birden fazla ürünün stoğu pozitif olsa bile yalnızca ilk uygun ürün döner. find(), tüm eşleşmeleri değil, ilk eşleşen nesneyi bulur. Tüm uygun nesneleri almak istiyorsanız
filter() kullanmanız gerekir:
JavaScript:
const stoktakiUrunler = urunler.filter(urun => urun.stok > 0);
console.log(stoktakiUrunler);
// [
// { kod: "A01", ad: "Klavye", stok: 4 },
// { kod: "C03", ad: "Kulaklık", stok: 8 }
// ]
Aradığınız nesnenin gerçekten bulunduğunu kullanmadan önce kontrol edin. Eşleşme yoksa dönen değer
undefined olacağı için doğrudan özellik okumaya çalışmak hata oluşturabilir.
JavaScript:
const sonuc = kullanicilar.find(kisi => kisi.id === 8);
if (sonuc) {
console.log(sonuc.ad);
} else {
console.log("Kullanıcı bulunamadı.");
}
Bu kontrol, aranan
id değerine sahip nesnenin bulunamadığını gösterir. Ancak bu durum dizinin bozuk olduğunu kanıtlamaz; aranan kayıt gerçekten mevcut olmayabilir veya karşılaştırmada kullanılan özellik adı ya da veri türü yanlış olabilir.find(), findIndex() ve some() arasındaki fark
Hangi yöntemi kullanacağınız, nesnenin kendisine mi, konumuna mı yoksa yalnızca eşleşme bilgisine mi ihtiyaç duyduğunuza bağlıdır.
| Yöntem | Dönen değer | Ne zaman kullanılır? |
|---|---|---|
| find() | İlk eşleşen nesne veya undefined | Nesnenin özelliklerini kullanmanız gerektiğinde |
| findIndex() | İlk eşleşen nesnenin dizin numarası veya -1 | Nesneyi dizindeki konumundan değiştirmek ya da silmek istediğinizde |
| some() | true veya false | En az bir eşleşme olup olmadığını bilmek istediğinizde |
| filter() | Eşleşen nesnelerden oluşan yeni dizi | Tüm eşleşmeleri almak istediğinizde |
JavaScript:
const yoneticiVarMi = kullanicilar.some(kisi => kisi.rol === "yönetici");
console.log(yoneticiVarMi); // true
Bir nesneyi güncellemek için önce konumunu bulmanız gerekiyorsa
findIndex() kullanabilirsiniz:
JavaScript:
const index = kullanicilar.findIndex(kisi => kisi.id === 2);
if (index !== -1) {
kullanicilar[index].rol = "editör";
}
findIndex() sonucu -1 ise eşleşen nesne yoktur. Bu kontrolü yapmadan dizi[index] üzerinde işlem yapmak, yanlış elemana erişmenize veya beklenmeyen bir sonuç üretmenize neden olabilir.Sayı ve metin karşılaştırmasında dikkat edilmesi gerekenler
Arama koşulunda genellikle kesin eşitlik olan
=== kullanın. Özellikle dış kaynaktan gelen verilerde id değeri sayı yerine metin olarak bulunabilir. Örneğin 2 === "2" sonucu false olur.
JavaScript:
const kayitlar = [
{ id: "2", ad: "Mehmet" }
];
const bulunan = kayitlar.find(kayit => kayit.id === "2");
console.log(bulunan); // { id: "2", ad: "Mehmet" }
Arama yapmadan önce verideki özelliğin adını ve türünü kontrol edin. Veri sayısal olarak kullanılacaksa karşılaştırmadan önce kontrollü biçimde sayıya dönüştürülebilir; ancak bu dönüşüm, geçersiz metinlerin yanlışlıkla eşleşmesine yol açmayacak şekilde yapılmalıdır.
Sonuç olarak, nesnenin kendisini bulmak için
find(), tüm eşleşmeleri almak için filter(), dizinini bulmak için findIndex(), yalnızca eşleşme durumunu öğrenmek için some() kullanın. Arama sonrasında dönen değeri kontrol ederek nesne bulunamadığında uygulamanın hangi işlemi yapacağını ayrıca belirleyin.