- Konu sahibi
- #1
Bir dizideki nesneleri filtrelemek için
Aşağıdaki varsayımsal örneği tarayıcınızın geliştirici konsolunda veya JavaScript çalıştırabildiğiniz bir ortamda çalıştırın. Dizideki ürünlerden yalnızca stokta olan ve fiyatı 500'den düşük olanlar seçilir:
Kendi verilerinize uygularken
Hiçbir nesne koşulu sağlamazsa sonuç
Metin karşılaştırmasında büyük ve küçük harf farkını göz ardı etmek isterseniz, metin olduğu bilinen bir özellik üzerinde
Yeni dizi oluşturulsa da içindeki nesneler kopyalanmaz. Örnekte
Bu işlem yalnızca yüzeysel kopya oluşturur; nesnelerin içindeki başka nesneler varsa onlar hâlâ ortak referans olabilir.
filter() metoduna her nesne için koşul döndüren bir fonksiyon verin. Koşulu sağlayan nesneler yeni bir dizide toplanır; orijinal diziye eleman eklenmez veya diziden eleman çıkarılmaz.Nesne özelliğine göre filtreleme
Aşağıdaki varsayımsal örneği tarayıcınızın geliştirici konsolunda veya JavaScript çalıştırabildiğiniz bir ortamda çalıştırın. Dizideki ürünlerden yalnızca stokta olan ve fiyatı 500'den düşük olanlar seçilir:
JavaScript:
const urunler = [
{ ad: "Klavye", fiyat: 450, stokta: true },
{ ad: "Fare", fiyat: 300, stokta: false },
{ ad: "Monitör", fiyat: 4000, stokta: true }
];
const sonuc = urunler.filter(urun =>
urun.stokta === true && urun.fiyat < 500
);
console.log(sonuc);
// [{ ad: "Klavye", fiyat: 450, stokta: true }]
filter(), fonksiyonu dizideki her eleman için çalıştırır. Fonksiyonun sonucu doğru olarak değerlendiriliyorsa ilgili eleman yeni diziye alınır. Burada && iki koşulun da sağlanmasını gerektirir: Fare stokta olmadığı, monitör ise fiyat sınırını aştığı için sonuca girmez.Kendi verilerinize uygularken
urunler yerine dizinizi, stokta ve fiyat yerine nesnelerinizdeki özellik adlarını yazın. En az bir koşulun sağlanması yeterliyse && yerine || kullanabilirsiniz.Boş sonuç ve veri türleri
Hiçbir nesne koşulu sağlamazsa sonuç
[] olur. Bu, dizinin boş olduğunu değil, o koşula uyan eleman bulunmadığını gösterir. Beklenmedik bir boş sonuçta özellik adlarını, karşılaştırılan değerleri ve veri türlerini kontrol edin. Örneğin urun.stokta === true, değeri true yerine "true" olan bir nesneyi eşleştirmez. Gelen verinin türünü doğrulayıp koşulu gerçek veriye göre düzeltin.Metin karşılaştırmasında büyük ve küçük harf farkını göz ardı etmek isterseniz, metin olduğu bilinen bir özellik üzerinde
urun.ad.toLowerCase().includes("klavye") gibi bir koşul kullanabilirsiniz. Özellik eksik veya metin dışında bir değerse önce veriyi doğrulayın ya da uygun bir varsayılan değer belirleyin.Filtrelenen nesneleri değiştirirken dikkat
Yeni dizi oluşturulsa da içindeki nesneler kopyalanmaz. Örnekte
sonuc[0].fiyat = 400 yazmak, orijinal dizideki aynı nesnenin fiyatını da değiştirir. Bağımsız üst düzey nesneler üzerinde çalışmak için filtrelemenin ardından kopyalayabilirsiniz:
JavaScript:
const kopyalar = urunler
.filter(urun => urun.stokta === true)
.map(urun => ({ ...urun }));
Bu işlem yalnızca yüzeysel kopya oluşturur; nesnelerin içindeki başka nesneler varsa onlar hâlâ ortak referans olabilir.