{"id":36055,"date":"2025-12-07T13:40:54","date_gmt":"2025-12-07T10:40:54","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36055"},"modified":"2025-12-07T13:40:54","modified_gmt":"2025-12-07T10:40:54","slug":"javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/","title":{"rendered":"JavaScript&#8217;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>JavaScript&#8217;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi<\/h2>\n<h2>Giri\u015f: Fonksiyonel Programlaman\u0131n Temel Ta\u015flar\u0131<\/h2>\n<p>JavaScript, esnekli\u011fi ve \u00e7ok paradigmal\u0131 yap\u0131s\u0131 sayesinde geli\u015ftiricilere geni\u015f bir ara\u00e7 yelpazesi sunar. Bu ara\u00e7lar aras\u0131nda, \u00f6zellikle modern JavaScript geli\u015ftirmesinde ve fonksiyonel programlama prensiplerinin benimsenmesinde kritik rol oynayan \u00fc\u00e7 dizi metodu bulunmaktad\u0131r: <code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code>. Bu metotlar, diziler \u00fczerinde d\u00f6nme, d\u00f6n\u00fc\u015ft\u00fcrme ve \u00f6zetleme i\u015flemlerini \u00e7ok daha temiz, okunabilir ve yan etkilerden ar\u0131nd\u0131r\u0131lm\u0131\u015f bir \u015fekilde yapmam\u0131z\u0131 sa\u011flar.<\/p>\n<p>Geleneksel <code>for<\/code> d\u00f6ng\u00fcleri ile de bu i\u015flemler yap\u0131labilirken, <code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code> gibi y\u00fcksek dereceli fonksiyonlar (higher-order functions), kodumuzu daha deklaratif (ne yap\u0131laca\u011f\u0131n\u0131 belirten) hale getirir, imperatif (nas\u0131l yap\u0131laca\u011f\u0131n\u0131 belirten) yakla\u015f\u0131mdan uzakla\u015ft\u0131r\u0131r. Bu, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde kodun anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini art\u0131r\u0131r. Ayr\u0131ca, orijinal diziyi de\u011fi\u015ftirmemeleri (immutable olmalar\u0131) sayesinde veri ak\u0131\u015f\u0131n\u0131 daha \u00f6ng\u00f6r\u00fclebilir k\u0131lar ve hatalar\u0131 azalt\u0131r.<\/p>\n<p>Bu makalede, JavaScript&#8217;in bu g\u00fc\u00e7l\u00fc \u00fc\u00e7l\u00fcs\u00fcn\u00fc detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Her bir metodun ne i\u015fe yarad\u0131\u011f\u0131n\u0131, nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131, s\u00f6zdizimini, \u00e7e\u015fitli \u00f6rneklerle pratik uygulamalar\u0131n\u0131 ve dikkat edilmesi gereken noktalar\u0131 ad\u0131m ad\u0131m ele alaca\u011f\u0131z. Amac\u0131m\u0131z, bu metotlar\u0131 etkin bir \u015fekilde kullanarak daha modern, performansl\u0131 ve okunabilir JavaScript kodlar\u0131 yazman\u0131z i\u00e7in size kapsaml\u0131 bir rehber sunmakt\u0131r.<\/p>\n<h2>map() Metodu: Dizileri D\u00f6n\u00fc\u015ft\u00fcrmenin G\u00fc\u00e7l\u00fc Yolu<\/h2>\n<h3>map() Nedir?<\/h3>\n<p><code>map()<\/code> metodu, bir dizinin her eleman\u0131 \u00fczerinde belirtilen bir fonksiyonu \u00e7a\u011f\u0131rarak yeni bir dizi olu\u015fturur. Orijinal diziye dokunmaz, yani onu de\u011fi\u015ftirmez. Her zaman orijinal diziyle ayn\u0131 uzunlukta yeni bir dizi d\u00f6nd\u00fcr\u00fcr. Temel amac\u0131, bir dizideki elemanlar\u0131 belirli bir kurala g\u00f6re d\u00f6n\u00fc\u015ft\u00fcrmek ve bu d\u00f6n\u00fc\u015ft\u00fcr\u00fclm\u00fc\u015f elemanlarla yeni bir koleksiyon olu\u015fturmakt\u0131r. \u00d6rne\u011fin, bir say\u0131 dizisindeki her say\u0131n\u0131n karesini almak veya bir nesne dizisindeki her nesnenin belirli bir \u00f6zelli\u011fini se\u00e7mek gibi i\u015flemler i\u00e7in idealdir.<\/p>\n<h3>map() S\u00f6zdizimi<\/h3>\n<p><code>map()<\/code> metodunun temel s\u00f6zdizimi a\u015fa\u011f\u0131daki gibidir:<\/p>\n<pre><code class=\"language-javascript\">array.map(callbackFunction(currentValue, index, array), thisArg)<\/code><\/pre>\n<p>Parametreleri a\u00e7\u0131klayal\u0131m:<br \/>\n*   <strong><code>callbackFunction<\/code><\/strong>: Her dizi eleman\u0131 \u00fczerinde y\u00fcr\u00fct\u00fclecek bir fonksiyon. Bu fonksiyon \u00fc\u00e7 arg\u00fcman alabilir:<br \/>\n    *   <strong><code>currentValue<\/code><\/strong>: \u0130\u015flenmekte olan mevcut dizi eleman\u0131. Bu arg\u00fcman zorunludur.<br \/>\n    *   <strong><code>index<\/code><\/strong> (iste\u011fe ba\u011fl\u0131): \u0130\u015flenmekte olan mevcut eleman\u0131n indeksi.<br \/>\n    *   <strong><code>array<\/code><\/strong> (iste\u011fe ba\u011fl\u0131): <code>map()<\/code> metodunun \u00e7a\u011fr\u0131ld\u0131\u011f\u0131 dizi.<br \/>\n*   <strong><code>thisArg<\/code><\/strong> (iste\u011fe ba\u011fl\u0131): <code>callbackFunction<\/code> i\u00e7inde <code>this<\/code> olarak kullan\u0131lacak bir de\u011fer. \u00c7o\u011fu durumda, \u00f6zellikle modern JavaScript&#8217;te ok fonksiyonlar\u0131 (arrow functions) kullan\u0131ld\u0131\u011f\u0131nda bu parametreye ihtiya\u00e7 duyulmaz, \u00e7\u00fcnk\u00fc ok fonksiyonlar\u0131 <code>this<\/code> de\u011ferini \u00e7evreleyen kapsamdan al\u0131r.<\/p>\n<p><code>callbackFunction<\/code> her bir eleman i\u00e7in bir de\u011fer d\u00f6nd\u00fcrmelidir ve bu de\u011fer, yeni dizinin ilgili eleman\u0131 olur.<\/p>\n<h3>map() \u00d6rnekleri<\/h3>\n<h4>1. Temel D\u00f6n\u00fc\u015f\u00fcm: Say\u0131lar\u0131n Karesini Alma<\/h4>\n<p>Bir say\u0131 dizisindeki her eleman\u0131n karesini al\u0131p yeni bir dizi olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-javascript\">const sayilar = [1, 2, 3, 4, 5];\n\n\/\/ Her say\u0131n\u0131n karesini alan yeni bir dizi olu\u015ftur\nconst kareler = sayilar.map(sayi => sayi * sayi);\n\nconsole.log(kareler);  \/\/ \u00c7\u0131kt\u0131: [1, 4, 9, 16, 25]\nconsole.log(sayilar); \/\/ \u00c7\u0131kt\u0131: [1, 2, 3, 4, 5] (Orijinal dizi de\u011fi\u015fmedi)<\/code><\/pre>\n<p>Burada, ok fonksiyonu <code>sayi => sayi * sayi<\/code> her <code>sayi<\/code> i\u00e7in \u00e7a\u011fr\u0131l\u0131r ve karesini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h4>2. Metin D\u00f6n\u00fc\u015f\u00fcm\u00fc: \u0130simleri B\u00fcy\u00fck Harfe \u00c7evirme<\/h4>\n<p>Bir isimler dizisindeki her ismi b\u00fcy\u00fck harfe \u00e7evirelim:<\/p>\n<pre><code class=\"language-javascript\">const isimler = [\"ali\", \"ay\u015fe\", \"mehmet\", \"zeynep\"];\n\nconst buyukHarfIsimler = isimler.map(isim => isim.toUpperCase());\n\nconsole.log(buyukHarfIsimler); \/\/ \u00c7\u0131kt\u0131: [\"AL\u0130\", \"AY\u015eE\", \"MEHMET\", \"ZEYNEP\"]<\/code><\/pre>\n<h4>3. Nesne Dizilerini D\u00f6n\u00fc\u015ft\u00fcrme: Belirli \u00d6zellikleri Se\u00e7me veya Yeni \u00d6zellik Ekleme<\/h4>\n<p>Kullan\u0131c\u0131 nesnelerinden olu\u015fan bir dizimiz olsun ve sadece isimlerini i\u00e7eren bir dizi veya belirli bilgileri i\u00e7eren yeni nesneler olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-javascript\">const kullanicilar = [\n    { id: 1, ad: \"Ahmet\", soyad: \"Y\u0131lmaz\", aktif: true },\n    { id: 2, ad: \"Ay\u015fe\", soyad: \"Demir\", aktif: false },\n    { id: 3, ad: \"Can\", soyad: \"Kara\", aktif: true }\n];\n\n\/\/ Sadece kullan\u0131c\u0131 adlar\u0131n\u0131 i\u00e7eren bir dizi olu\u015ftur\nconst kullaniciAdlari = kullanicilar.map(kullanici => kullanici.ad);\nconsole.log(kullaniciAdlari); \/\/ \u00c7\u0131kt\u0131: [\"Ahmet\", \"Ay\u015fe\", \"Can\"]\n\n\/\/ Kullan\u0131c\u0131lar\u0131n tam adlar\u0131n\u0131 ve aktiflik durumlar\u0131n\u0131 i\u00e7eren yeni nesneler olu\u015ftur\nconst kullaniciBilgileri = kullanicilar.map(kullanici => ({\n    tamAd: <code>${kullanici.ad} ${kullanici.soyad}<\/code>,\n    aktifMi: kullanici.aktif\n}));\nconsole.log(kullaniciBilgileri);\n\/* \u00c7\u0131kt\u0131:\n[\n  { tamAd: 'Ahmet Y\u0131lmaz', aktifMi: true },\n  { tamAd: 'Ay\u015fe Demir', aktifMi: false },\n  { tamAd: 'Can Kara', aktifMi: true }\n]\n*\/<\/code><\/pre>\n<p>Bu \u00f6rnek, <code>map()<\/code> metodunun nesne dizilerini farkl\u0131 bir yap\u0131ya d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in ne kadar esnek kullan\u0131labilece\u011fini g\u00f6sterir.<\/p>\n<h4>4. \u0130ndeks Parametresini Kullanma<\/h4>\n<p>Bazen eleman\u0131n kendi de\u011ferinin yan\u0131 s\u0131ra indeksine de ihtiyac\u0131m\u0131z olabilir:<\/p>\n<pre><code class=\"language-javascript\">const urunler = [\"Elma\", \"Armut\", \"Kiraz\"];\n\nconst urunListesi = urunler.map((urun, index) => <code>${index + 1}. ${urun}<\/code>);\nconsole.log(urunListesi); \/\/ \u00c7\u0131kt\u0131: [\"1. Elma\", \"2. Armut\", \"3. Kiraz\"]<\/code><\/pre>\n<h3>map() Kullan\u0131m Alanlar\u0131<\/h3>\n<p>*   <strong>Veri D\u00f6n\u00fc\u015f\u00fcm\u00fc:<\/strong> API&#8217;den gelen verileri UI&#8217;da g\u00f6sterilecek formata \u00e7evirmek.<br \/>\n*   <strong>Yeni Veri Yap\u0131lar\u0131 Olu\u015fturma:<\/strong> Mevcut bir dizi veya nesne k\u00fcmesinden farkl\u0131 bir yap\u0131ya sahip yeni bir dizi olu\u015fturmak.<br \/>\n*   <strong>Form \u0130\u015fleme:<\/strong> Bir formdaki input de\u011ferlerini belirli bir formata d\u00f6n\u00fc\u015ft\u00fcrmek.<br \/>\n*   <strong>UI Bile\u015fenleri Olu\u015fturma:<\/strong> React, Vue gibi k\u00fct\u00fcphanelerde bir dizi veriden birden fazla UI bile\u015feni (\u00f6rne\u011fin bir liste) olu\u015fturmak.<\/p>\n<h3>map() Dikkat Edilmesi Gerekenler<\/h3>\n<p>*   <strong>Yan Etkiler (Side Effects):<\/strong> <code>map()<\/code> metodunun callback fonksiyonu m\u00fcmk\u00fcn oldu\u011funca &#8220;saf&#8221; (pure) olmal\u0131d\u0131r; yani d\u0131\u015far\u0131daki bir durumu de\u011fi\u015ftirmemeli veya ayn\u0131 girdi i\u00e7in her zaman ayn\u0131 \u00e7\u0131kt\u0131y\u0131 \u00fcretmelidir. Callback i\u00e7inde orijinal dizi elemanlar\u0131n\u0131 veya d\u0131\u015far\u0131daki de\u011fi\u015fkenleri de\u011fi\u015ftirmek beklenmedik sonu\u00e7lara yol a\u00e7abilir.<br \/>\n*   <strong>Performans:<\/strong> \u00c7ok b\u00fcy\u00fck diziler \u00fczerinde <code>map()<\/code> kullan\u0131rken performans g\u00f6z \u00f6n\u00fcnde bulundurulmal\u0131d\u0131r, ancak modern JavaScript motorlar\u0131 bu metotlar\u0131 olduk\u00e7a optimize etmi\u015ftir. Genellikle manuel <code>for<\/code> d\u00f6ng\u00fclerinden \u00e7ok daha okunabilir ve g\u00fcvenlidir.<br \/>\n*   <strong>Bo\u015f Diziler:<\/strong> <code>map()<\/code> bo\u015f bir dizi \u00fczerinde \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, callback fonksiyonu asla \u00e7al\u0131\u015ft\u0131r\u0131lmaz ve bo\u015f bir dizi d\u00f6nd\u00fcr\u00fcl\u00fcr.<br \/>\n*   <strong><code>forEach()<\/code> vs. <code>map()<\/code>:<\/strong> E\u011fer bir dizi \u00fczerinde d\u00f6n\u00fcp sadece yan etkiler (console.log gibi) olu\u015fturmak istiyorsan\u0131z ve yeni bir diziye ihtiyac\u0131n\u0131z yoksa <code>forEach()<\/code> kullanmal\u0131s\u0131n\u0131z. Yeni bir dizi olu\u015fturman\u0131z gerekiyorsa <code>map()<\/code> tercih edilmelidir. <code>forEach()<\/code> bir de\u011fer d\u00f6nd\u00fcrmezken, <code>map()<\/code> her zaman yeni bir dizi d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h2>filter() Metodu: Dizilerden Se\u00e7im Yapman\u0131n Zarif Yolu<\/h2>\n<h3>filter() Nedir?<\/h3>\n<p><code>filter()<\/code> metodu, bir dizinin elemanlar\u0131n\u0131 belirli bir ko\u015fula g\u00f6re filtreleyerek yeni bir dizi olu\u015fturur. <code>map()<\/code> gibi, orijinal diziyi de\u011fi\u015ftirmez. Yaln\u0131zca belirtilen ko\u015fulu (testi) ge\u00e7en elemanlar\u0131 i\u00e7eren yeni bir dizi d\u00f6nd\u00fcr\u00fcr. Yeni dizi, orijinal diziden daha k\u0131sa olabilir veya hi\u00e7bir eleman ko\u015fulu sa\u011flamazsa bo\u015f bir dizi olabilir.<\/p>\n<h3>filter() S\u00f6zdizimi<\/h3>\n<p><code>filter()<\/code> metodunun temel s\u00f6zdizimi de <code>map()<\/code> metoduna benzerdir:<\/p>\n<pre><code class=\"language-javascript\">array.filter(callbackFunction(currentValue, index, array), thisArg)<\/code><\/pre>\n<p>Parametreleri a\u00e7\u0131klayal\u0131m:<br \/>\n*   <strong><code>callbackFunction<\/code><\/strong>: Her dizi eleman\u0131 \u00fczerinde y\u00fcr\u00fct\u00fclecek bir fonksiyon. Bu fonksiyon \u00fc\u00e7 arg\u00fcman alabilir:<br \/>\n    *   <strong><code>currentValue<\/code><\/strong>: \u0130\u015flenmekte olan mevcut dizi eleman\u0131. Bu arg\u00fcman zorunludur.<br \/>\n    *   <strong><code>index<\/code><\/strong> (iste\u011fe ba\u011fl\u0131): \u0130\u015flenmekte olan mevcut eleman\u0131n indeksi.<br \/>\n    *   <strong><code>array<\/code><\/strong> (iste\u011fe ba\u011fl\u0131): <code>filter()<\/code> metodunun \u00e7a\u011fr\u0131ld\u0131\u011f\u0131 dizi.<br \/>\n*   <strong><code>thisArg<\/code><\/strong> (iste\u011fe ba\u011fl\u0131): <code>callbackFunction<\/code> i\u00e7inde <code>this<\/code> olarak kullan\u0131lacak bir de\u011fer.<\/p>\n<p><code>callbackFunction<\/code> her bir eleman i\u00e7in <code>true<\/code> veya <code>false<\/code> d\u00f6nd\u00fcrmelidir. E\u011fer <code>true<\/code> d\u00f6nd\u00fcr\u00fcrse, o eleman yeni diziye dahil edilir; <code>false<\/code> d\u00f6nd\u00fcr\u00fcrse, eleman atlan\u0131r.<\/p>\n<h3>filter() \u00d6rnekleri<\/h3>\n<h4>1. Say\u0131lar\u0131 Filtreleme: \u00c7ift Say\u0131lar\u0131 Bulma<\/h4>\n<p>Bir say\u0131 dizisindeki \u00e7ift say\u0131lar\u0131 bulup yeni bir dizi olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-javascript\">const sayilar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\nconst ciftSayilar = sayilar.filter(sayi => sayi % 2 === 0);\n\nconsole.log(ciftSayilar); \/\/ \u00c7\u0131kt\u0131: [2, 4, 6, 8, 10]\nconsole.log(sayilar);    \/\/ \u00c7\u0131kt\u0131: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (Orijinal dizi de\u011fi\u015fmedi)<\/code><\/pre>\n<p>Burada, <code>sayi => sayi % 2 === 0<\/code> fonksiyonu, <code>sayi<\/code> \u00e7ift ise <code>true<\/code>, tek ise <code>false<\/code> d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h4>2. Metinleri Filtreleme: Belirli Bir Harfle Ba\u015flayan Kelimeler<\/h4>\n<p>Bir kelime dizisinden &#8220;A&#8221; harfi ile ba\u015flayanlar\u0131 se\u00e7elim:<\/p>\n<pre><code class=\"language-javascript\">const kelimeler = [\"Elma\", \"Armut\", \"Muz\", \"Ananas\", \"\u00c7ilek\"];\n\nconst aIleBaslayanlar = kelimeler.filter(kelime => kelime.startsWith(\"A\"));\n\nconsole.log(aIleBaslayanlar); \/\/ \u00c7\u0131kt\u0131: [\"Armut\", \"Ananas\"]<\/code><\/pre>\n<p><code>startsWith()<\/code> metodu, bir string&#8217;in belirli bir \u00f6nekle ba\u015flay\u0131p ba\u015flamad\u0131\u011f\u0131n\u0131 kontrol eder.<\/p>\n<h4>3. Nesne Dizilerini Filtreleme: Aktif Kullan\u0131c\u0131lar\u0131 Bulma<\/h4>\n<p>Kullan\u0131c\u0131 nesnelerinden olu\u015fan bir diziden sadece aktif olanlar\u0131 se\u00e7elim:<\/p>\n<pre><code class=\"language-javascript\">const kullanicilar = [\n    { id: 1, ad: \"Ahmet\", aktif: true },\n    { id: 2, ad: \"Ay\u015fe\", aktif: false },\n    { id: 3, ad: \"Can\", aktif: true },\n    { id: 4, ad: \"Deniz\", aktif: false }\n];\n\nconst aktifKullanicilar = kullanicilar.filter(kullanici => kullanici.aktif);\n\nconsole.log(aktifKullanicilar);\n\/* \u00c7\u0131kt\u0131:\n[\n  { id: 1, ad: 'Ahmet', aktif: true },\n  { id: 3, ad: 'Can', aktif: true }\n]\n*\/<\/code><\/pre>\n<p>Birden fazla ko\u015ful da belirleyebiliriz:<\/p>\n<pre><code class=\"language-javascript\">const yirmiYasUstuAktifler = kullanicilar.filter(kullanici => kullanici.aktif && kullanici.yas > 20);\n\/\/ (Yukar\u0131daki \u00f6rnekte ya\u015f \u00f6zelli\u011fi yok, varsay\u0131msal bir senaryo)<\/code><\/pre>\n<h4>4. \u0130ndeks Parametresini Kullanma<\/h4>\n<p>Bazen belirli indekslerdeki elemanlar\u0131 filtrelemek isteyebiliriz:<\/p>\n<pre><code class=\"language-javascript\">const liste = ['a', 'b', 'c', 'd', 'e'];\n\n\/\/ Tek indeksli elemanlar\u0131 filtrele\nconst tekIndeksli = liste.filter((_, index) => index % 2 !== 0);\nconsole.log(tekIndeksli); \/\/ \u00c7\u0131kt\u0131: [\"b\", \"d\"]<\/code><\/pre>\n<p>Burada <code>_<\/code> kullan\u0131larak <code>currentValue<\/code> parametresinin kullan\u0131lmad\u0131\u011f\u0131 belirtilmi\u015ftir, bu yayg\u0131n bir pratik.<\/p>\n<h3>filter() Kullan\u0131m Alanlar\u0131<\/h3>\n<p>*   <strong>Arama ve Filtreleme:<\/strong> Bir listeden veya tablodan kullan\u0131c\u0131 girdisine g\u00f6re elemanlar\u0131 filtrelemek.<br \/>\n*   <strong>Veri Validasyonu:<\/strong> Bir veri setindeki belirli kriterleri kar\u015f\u0131lamayan elemanlar\u0131 ay\u0131klamak.<br \/>\n*   <strong>UI Durumu Y\u00f6netimi:<\/strong> Bir dizi \u00f6\u011fenin durumuna g\u00f6re (\u00f6rne\u011fin tamamlanm\u0131\u015f g\u00f6revler) farkl\u0131 listeler olu\u015fturmak.<br \/>\n*   <strong>Gereksiz Verileri Kald\u0131rma:<\/strong> API yan\u0131tlar\u0131ndan veya yerel verilerden istenmeyen veya ge\u00e7ersiz \u00f6\u011feleri temizlemek.<\/p>\n<h3>filter() Dikkat Edilmesi Gerekenler<\/h3>\n<p>*   <strong>Boolean D\u00f6n\u00fc\u015f De\u011feri:<\/strong> Callback fonksiyonu her zaman bir boolean (true\/false) de\u011fer d\u00f6nd\u00fcrmelidir. Yanl\u0131\u015fl\u0131kla ba\u015fka bir de\u011fer d\u00f6nd\u00fcr\u00fcl\u00fcrse, JavaScript bu de\u011feri boolean&#8217;a d\u00f6n\u00fc\u015ft\u00fcr\u00fcr (truthy\/falsy de\u011ferler). \u00d6rne\u011fin, <code>0<\/code>, <code>null<\/code>, <code>undefined<\/code>, <code>\"\"<\/code> gibi de\u011ferler <code>false<\/code> olarak kabul edilir.<br \/>\n*   <strong>Performans:<\/strong> T\u0131pk\u0131 <code>map()<\/code> gibi, \u00e7ok b\u00fcy\u00fck dizilerde performans dikkate al\u0131nmal\u0131d\u0131r, ancak genellikle sorun te\u015fkil etmez.<br \/>\n*   <strong>Bo\u015f Diziler:<\/strong> <code>filter()<\/code> bo\u015f bir dizi \u00fczerinde \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, callback fonksiyonu asla \u00e7al\u0131\u015ft\u0131r\u0131lmaz ve bo\u015f bir dizi d\u00f6nd\u00fcr\u00fcl\u00fcr.<br \/>\n<em>   <strong><code>find()<\/code> vs. <code>filter()<\/code>:<\/strong> E\u011fer yaln\u0131zca ko\u015fulu sa\u011flayan <\/em>ilk* elemana ihtiyac\u0131n\u0131z varsa <code>find()<\/code> metodunu kullanmal\u0131s\u0131n\u0131z. <code>filter()<\/code> her zaman bir dizi d\u00f6nd\u00fcr\u00fcrken, <code>find()<\/code> tek bir eleman veya <code>undefined<\/code> d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h2>reduce() Metodu: Dizileri Tek Bir De\u011fere \u0130ndirgeme Sanat\u0131<\/h2>\n<h3>reduce() Nedir?<\/h3>\n<p><code>reduce()<\/code> metodu, bir dizinin her eleman\u0131 \u00fczerinde bir &#8220;reducer&#8221; fonksiyonunu (sizin sa\u011flad\u0131\u011f\u0131n\u0131z) y\u00fcr\u00fcterek diziyi tek bir \u00e7\u0131kt\u0131 de\u011ferine indirger. Bu \u00e7\u0131kt\u0131 de\u011feri bir say\u0131, bir string, bir nesne, bir dizi veya ba\u015fka herhangi bir veri tipi olabilir. <code>reduce()<\/code> metodunun g\u00fcc\u00fc, diziyi belirli bir mant\u0131\u011fa g\u00f6re &#8220;toplayarak&#8221; veya &#8220;birle\u015ftirerek&#8221; tek bir sonu\u00e7 elde etmesinden gelir. Di\u011fer metotlardan farkl\u0131 olarak, <code>reduce()<\/code>&#8216;un d\u00f6nd\u00fcrd\u00fc\u011f\u00fc de\u011ferin tipi orijinal dizinin eleman tipinden farkl\u0131 olabilir.<\/p>\n<h3>reduce() S\u00f6zdizimi<\/h3>\n<p><code>reduce()<\/code> metodunun s\u00f6zdizimi di\u011ferlerinden biraz daha karma\u015f\u0131kt\u0131r, \u00e7\u00fcnk\u00fc bir &#8220;accumulator&#8221; (biriktirici) kavram\u0131n\u0131 i\u00e7erir:<\/p>\n<pre><code class=\"language-javascript\">array.reduce(callbackFunction(accumulator, currentValue, index, array), initialValue)<\/code><\/pre>\n<p>Parametreleri a\u00e7\u0131klayal\u0131m:<br \/>\n*   <strong><code>callbackFunction<\/code><\/strong>: Her dizi eleman\u0131 \u00fczerinde y\u00fcr\u00fct\u00fclecek bir fonksiyon. Bu fonksiyon d\u00f6rt arg\u00fcman alabilir:<br \/>\n    *   <strong><code>accumulator<\/code><\/strong>: Callback fonksiyonunun \u00f6nceki \u00e7a\u011fr\u0131s\u0131ndan d\u00f6nd\u00fcr\u00fclen de\u011fer. \u0130lk \u00e7a\u011fr\u0131da, e\u011fer <code>initialValue<\/code> sa\u011flanm\u0131\u015fsa <code>initialValue<\/code> de\u011feri, sa\u011flanmam\u0131\u015fsa dizinin ilk eleman\u0131 olur. Bu arg\u00fcman zorunludur.<br \/>\n    *   <strong><code>currentValue<\/code><\/strong>: \u0130\u015flenmekte olan mevcut dizi eleman\u0131. \u0130lk \u00e7a\u011fr\u0131da, e\u011fer <code>initialValue<\/code> sa\u011flanm\u0131\u015fsa dizinin ilk eleman\u0131, sa\u011flanmam\u0131\u015fsa dizinin ikinci eleman\u0131 olur. Bu arg\u00fcman zorunludur.<br \/>\n    *   <strong><code>index<\/code><\/strong> (iste\u011fe ba\u011fl\u0131): \u0130\u015flenmekte olan mevcut eleman\u0131n indeksi.<br \/>\n    *   <strong><code>array<\/code><\/strong> (iste\u011fe ba\u011fl\u0131): <code>reduce()<\/code> metodunun \u00e7a\u011fr\u0131ld\u0131\u011f\u0131 dizi.<br \/>\n*   <strong><code>initialValue<\/code><\/strong> (iste\u011fe ba\u011fl\u0131): <code>accumulator<\/code> i\u00e7in ba\u015flang\u0131\u00e7 de\u011feri. Bu parametre \u00e7ok \u00f6nemlidir ve sa\u011flanmas\u0131 \u015fiddetle tavsiye edilir.<\/p>\n<p><code>callbackFunction<\/code> her \u00e7a\u011fr\u0131da bir de\u011fer d\u00f6nd\u00fcrmelidir ve bu de\u011fer bir sonraki \u00e7a\u011fr\u0131da <code>accumulator<\/code> olarak kullan\u0131l\u0131r. <code>reduce()<\/code> metodu, t\u00fcm dizi elemanlar\u0131 i\u015flendikten sonra <code>accumulator<\/code>&#8216;\u0131n son de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h3>reduce() \u00d6rnekleri<\/h3>\n<h4>1. Dizideki T\u00fcm Say\u0131lar\u0131n Toplam\u0131n\u0131 Bulma<\/h4>\n<p>En klasik <code>reduce()<\/code> \u00f6rne\u011fi, bir say\u0131 dizisindeki t\u00fcm say\u0131lar\u0131n toplam\u0131n\u0131 bulmakt\u0131r:<\/p>\n<pre><code class=\"language-javascript\">const sayilar = [1, 2, 3, 4, 5];\n\n\/\/ Ba\u015flang\u0131\u00e7 de\u011feri 0 olan bir accumulator ile toplam\u0131 bul\nconst toplam = sayilar.reduce((acc, current) => acc + current, 0);\n\nconsole.log(toplam); \/\/ \u00c7\u0131kt\u0131: 15 (0 + 1 + 2 + 3 + 4 + 5)<\/code><\/pre>\n<p>Burada <code>0<\/code> <code>initialValue<\/code> olarak verilmi\u015ftir. \u0130lk \u00e7a\u011fr\u0131da <code>acc<\/code> 0, <code>current<\/code> 1 olur. Sonraki \u00e7a\u011fr\u0131larda <code>acc<\/code> \u00f6nceki toplam, <code>current<\/code> ise s\u0131radaki eleman olur.<\/p>\n<p>E\u011fer <code>initialValue<\/code> verilmezse:<\/p>\n<pre><code class=\"language-javascript\">const toplamYokBaslangicDegeri = sayilar.reduce((acc, current) => acc + current);\nconsole.log(toplamYokBaslangicDegeri); \/\/ \u00c7\u0131kt\u0131: 15<\/code><\/pre>\n<p>Bu durumda <code>acc<\/code> ilk eleman (1), <code>current<\/code> ikinci eleman (2) ile ba\u015flar. Dizi bo\u015f oldu\u011funda veya beklenmedik tiplerde elemanlar oldu\u011funda sorunlara yol a\u00e7abilece\u011fi i\u00e7in <code>initialValue<\/code> her zaman belirtmek daha g\u00fcvenlidir.<\/p>\n<h4>2. Diziyi D\u00fczle\u015ftirme (Flattening an Array)<\/h4>\n<p>\u0130\u00e7 i\u00e7e ge\u00e7mi\u015f dizilerden olu\u015fan bir diziyi tek bir dizi haline getirelim:<\/p>\n<pre><code class=\"language-javascript\">const icIceDizi = [[1, 2], [3, 4], [5, 6]];\n\nconst duzDizi = icIceDizi.reduce((acc, current) => acc.concat(current), []);\n\nconsole.log(duzDizi); \/\/ \u00c7\u0131kt\u0131: [1, 2, 3, 4, 5, 6]<\/code><\/pre>\n<p>Burada <code>initialValue<\/code> olarak bo\u015f bir dizi <code>[]<\/code> verilmi\u015ftir. Her ad\u0131mda <code>current<\/code> (bir i\u00e7 dizi) <code>acc<\/code> (biriktirilen d\u00fcz dizi) ile birle\u015ftirilir.<\/p>\n<h4>3. Nesneleri Bir \u00d6zelli\u011fe G\u00f6re Gruplama<\/h4>\n<p>Nesne dizisindeki elemanlar\u0131 belirli bir \u00f6zelli\u011fe g\u00f6re gruplay\u0131p yeni bir nesne olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-javascript\">const kisiler = [\n    { ad: \"Ahmet\", yas: 30, sehir: \"Ankara\" },\n    { ad: \"Ay\u015fe\", yas: 25, sehir: \"\u0130stanbul\" },\n    { ad: \"Can\", yas: 30, sehir: \"\u0130zmir\" },\n    { ad: \"Deniz\", yas: 25, sehir: \"Ankara\" }\n];\n\nconst kisilerYasGruplu = kisiler.reduce((acc, kisi) => {\n    const yas = kisi.yas;\n    if (!acc[yas]) {\n        acc[yas] = [];\n    }\n    acc[yas].push(kisi);\n    return acc;\n}, {}); \/\/ Ba\u015flang\u0131\u00e7 de\u011feri bo\u015f bir nesne {}\n\nconsole.log(kisilerYasGruplu);\n\/* \u00c7\u0131kt\u0131:\n{\n  '25': [\n    { ad: 'Ay\u015fe', yas: 25, sehir: '\u0130stanbul' },\n    { ad: 'Deniz', yas: 25, sehir: 'Ankara' }\n  ],\n  '30': [\n    { ad: 'Ahmet', yas: 30, sehir: 'Ankara' },\n    { ad: 'Can', yas: 30, sehir: '\u0130zmir' }\n  ]\n}\n*\/<\/code><\/pre>\n<p>Bu \u00f6rnek, <code>reduce()<\/code> metodunun karma\u015f\u0131k veri yap\u0131lar\u0131 olu\u015fturmak i\u00e7in ne kadar g\u00fc\u00e7l\u00fc oldu\u011funu g\u00f6sterir. <code>initialValue<\/code> olarak bo\u015f bir nesne <code>({})<\/code> kullan\u0131lm\u0131\u015ft\u0131r ve <code>accumulator<\/code> bu nesneyi temsil eder.<\/p>\n<h4>4. Bir Dizideki Elemanlar\u0131n Say\u0131s\u0131n\u0131 Bulma (Frekans Sayac\u0131)<\/h4>\n<p>Bir dizideki her eleman\u0131n ka\u00e7 kez ge\u00e7ti\u011fini sayan bir nesne olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-javascript\">const meyveler = [\"elma\", \"armut\", \"elma\", \"muz\", \"armut\", \"elma\"];\n\nconst meyveSayilari = meyveler.reduce((acc, meyve) => {\n    acc[meyve] = (acc[meyve] || 0) + 1;\n    return acc;\n}, {}); \/\/ Ba\u015flang\u0131\u00e7 de\u011feri bo\u015f bir nesne {}\n\nconsole.log(meyveSayilari); \/\/ \u00c7\u0131kt\u0131: { elma: 3, armut: 2, muz: 1 }<\/code><\/pre>\n<h4>5. map() ve filter() Metotlar\u0131n\u0131 reduce() ile Uygulama<\/h4>\n<p><code>reduce()<\/code> metodunun ne kadar esnek oldu\u011funu g\u00f6stermek i\u00e7in, <code>map()<\/code> ve <code>filter()<\/code>&#8216;\u0131n i\u015flevlerini <code>reduce()<\/code> ile nas\u0131l taklit edebilece\u011fimize bakal\u0131m:<\/p>\n<p><strong><code>map()<\/code>&#8216;i <code>reduce()<\/code> ile taklit etme:<\/strong><\/p>\n<pre><code class=\"language-javascript\">const sayilar = [1, 2, 3, 4, 5];\n\nconst karelerReduce = sayilar.reduce((acc, sayi) => {\n    acc.push(sayi * sayi);\n    return acc;\n}, []); \/\/ Ba\u015flang\u0131\u00e7 de\u011feri bo\u015f bir dizi []\n\nconsole.log(karelerReduce); \/\/ \u00c7\u0131kt\u0131: [1, 4, 9, 16, 25]<\/code><\/pre>\n<p><strong><code>filter()<\/code>&#8216;\u0131 <code>reduce()<\/code> ile taklit etme:<\/strong><\/p>\n<pre><code class=\"language-javascript\">const sayilar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\nconst ciftSayilarReduce = sayilar.reduce((acc, sayi) => {\n    if (sayi % 2 === 0) {\n        acc.push(sayi);\n    }\n    return acc;\n}, []); \/\/ Ba\u015flang\u0131\u00e7 de\u011feri bo\u015f bir dizi []\n\nconsole.log(ciftSayilarReduce); \/\/ \u00c7\u0131kt\u0131: [2, 4, 6, 8, 10]<\/code><\/pre>\n<p>Bu \u00f6rnekler, <code>reduce()<\/code>&#8216;un temel bir yap\u0131 ta\u015f\u0131 oldu\u011funu ve di\u011fer dizi metotlar\u0131n\u0131n onun \u00fczerine in\u015fa edilebilece\u011fini g\u00f6sterir. Ancak, belirli bir i\u015f i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f <code>map()<\/code> veya <code>filter()<\/code> gibi metotlar\u0131 kullanmak genellikle daha okunabilir ve amaca daha uygun bir yakla\u015f\u0131md\u0131r.<\/p>\n<h3>reduce() Kullan\u0131m Alanlar\u0131<\/h3>\n<p>*   <strong>Veri Toplama\/\u00d6zetleme:<\/strong> Bir dizideki say\u0131lar\u0131n toplam\u0131n\u0131, ortalamas\u0131n\u0131, en b\u00fcy\u00fck\/en k\u00fc\u00e7\u00fck de\u011ferini bulma.<br \/>\n*   <strong>Karma\u015f\u0131k Veri D\u00f6n\u00fc\u015f\u00fcmleri:<\/strong> Bir diziden farkl\u0131 bir yap\u0131ya (nesne, i\u00e7 i\u00e7e dizi vb.) sahip tek bir sonu\u00e7 olu\u015fturma.<br \/>\n*   <strong>Sepet Toplam\u0131 Hesaplama:<\/strong> Bir al\u0131\u015fveri\u015f sepetindeki \u00fcr\u00fcnlerin toplam fiyat\u0131n\u0131 hesaplama.<br \/>\n*   <strong>URL Parametrelerini \u0130\u015fleme:<\/strong> Bir URL&#8217;deki parametre string&#8217;ini bir nesneye d\u00f6n\u00fc\u015ft\u00fcrme.<br \/>\n*   <strong>S\u00f6zl\u00fck Olu\u015fturma:<\/strong> Bir dizi anahtar-de\u011fer \u00e7iftinden bir nesne olu\u015fturma.<\/p>\n<h3>reduce() Dikkat Edilmesi Gerekenler<\/h3>\n<p>*   <strong><code>initialValue<\/code>&#8216;in \u00d6nemi:<\/strong> <code>initialValue<\/code> parametresini her zaman sa\u011flamak, kodunuzu daha g\u00fcvenli ve \u00f6ng\u00f6r\u00fclebilir hale getirir.<br \/>\n    *   E\u011fer dizi bo\u015fsa ve <code>initialValue<\/code> sa\u011flanmam\u0131\u015fsa, <code>TypeError<\/code> hatas\u0131 f\u0131rlat\u0131l\u0131r.<br \/>\n    *   E\u011fer dizi tek elemanl\u0131ysa ve <code>initialValue<\/code> sa\u011flanmam\u0131\u015fsa, <code>reduce()<\/code> callback fonksiyonunu \u00e7al\u0131\u015ft\u0131rmadan do\u011frudan bu tek eleman\u0131 d\u00f6nd\u00fcr\u00fcr.<br \/>\n    *   <code>initialValue<\/code>&#8216;in tipi, <code>reduce()<\/code> metodunun d\u00f6nd\u00fcrece\u011fi nihai de\u011ferin tipini belirler.<br \/>\n*   <strong>Okunabilirlik:<\/strong> <code>reduce()<\/code> \u00e7ok g\u00fc\u00e7l\u00fc ve esnek olsa da, bazen karma\u015f\u0131k callback fonksiyonlar\u0131 nedeniyle okunabilirli\u011fi azaltabilir. E\u011fer <code>map()<\/code> veya <code>filter()<\/code> gibi daha spesifik bir metot i\u015finizi g\u00f6r\u00fcyorsa, onu tercih etmek genellikle daha iyidir. <code>reduce()<\/code>&#8216;u ger\u00e7ekten bir &#8220;biriktirme&#8221; veya &#8220;indirgeme&#8221; i\u015flemi gerekti\u011finde kullan\u0131n.<br \/>\n*   <strong>Yan Etkiler:<\/strong> <code>accumulator<\/code>&#8216;\u0131 do\u011frudan de\u011fi\u015ftirmek yerine, yeni bir <code>accumulator<\/code> de\u011feri d\u00f6nd\u00fcrmek (\u00f6zellikle nesne veya dizi gibi referans tipleriyle \u00e7al\u0131\u015f\u0131rken) fonksiyonel programlama prensiplerine daha uygundur ve beklenmedik yan etkileri \u00f6nler. \u00d6rne\u011fin, bir diziye eleman eklerken <code>acc.push()<\/code> yerine <code>[...acc, current]<\/code> kullanmak daha &#8220;saf&#8221; bir yakla\u015f\u0131md\u0131r. Ancak, performans hassasiyeti olan durumlarda <code>push<\/code> gibi mutatif i\u015flemler tercih edilebilir, bu bir denge meselesidir.<\/p>\n<h2>Metotlar\u0131 Zincirleme (Chaining): Ak\u0131c\u0131 ve Etkili \u0130\u015flemler<\/h2>\n<p><code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code> metotlar\u0131n\u0131n her biri yeni bir dizi (veya <code>reduce()<\/code> durumunda herhangi bir de\u011fer) d\u00f6nd\u00fcrd\u00fc\u011f\u00fc i\u00e7in, bunlar\u0131 art arda zincirleyerek kullanabiliriz. Bu, birden fazla i\u015flemi tek bir ak\u0131c\u0131 ifadeyle ger\u00e7ekle\u015ftirmemizi sa\u011flar, ara de\u011fi\u015fkenlere olan ihtiyac\u0131 azalt\u0131r ve kodun okunabilirli\u011fini art\u0131r\u0131r.<\/p>\n<h3>Zincirleme Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>Bir metot yeni bir dizi d\u00f6nd\u00fcrd\u00fc\u011f\u00fcnde, bu yeni dizi do\u011frudan ba\u015fka bir dizi metodunun \u00fczerine \u00e7a\u011fr\u0131labilir.<\/p>\n<pre><code class=\"language-javascript\">const sayilar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\nconst ciftSayilarinKareleriToplami = sayilar\n    .filter(sayi => sayi % 2 === 0) \/\/ \u00d6nce \u00e7ift say\u0131lar\u0131 filtrele: [2, 4, 6, 8, 10]\n    .map(sayi => sayi * sayi)      \/\/ Sonra her birinin karesini al: [4, 16, 36, 64, 100]\n    .reduce((acc, kare) => acc + kare, 0); \/\/ Son olarak karelerin toplam\u0131n\u0131 al: 220\n\nconsole.log(ciftSayilarinKareleriToplami); \/\/ \u00c7\u0131kt\u0131: 220<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>filter()<\/code> metodu <code>sayilar<\/code> dizisini filtreleyerek yeni bir dizi d\u00f6nd\u00fcr\u00fcr. Bu yeni dizi hemen <code>map()<\/code> metodu taraf\u0131ndan kullan\u0131l\u0131r. <code>map()<\/code> de kendi i\u00e7inde bir d\u00f6n\u00fc\u015f\u00fcm yaparak yeni bir dizi d\u00f6nd\u00fcr\u00fcr ve bu dizi de son olarak <code>reduce()<\/code> metodu taraf\u0131ndan i\u015flenir.<\/p>\n<h3>Zincirleme \u00d6rnekleri<\/h3>\n<h4>1. Aktif Kullan\u0131c\u0131lar\u0131n Ya\u015f Ortalamas\u0131n\u0131 Bulma<\/h4>\n<p>Kullan\u0131c\u0131lar dizimizden sadece aktif olanlar\u0131 filtreleyip, onlar\u0131n ya\u015flar\u0131n\u0131n ortalamas\u0131n\u0131 bulal\u0131m:<\/p>\n<pre><code class=\"language-javascript\">const kullanicilar = [\n    { id: 1, ad: \"Ahmet\", yas: 30, aktif: true },\n    { id: 2, ad: \"Ay\u015fe\", yas: 25, aktif: false },\n    { id: 3, ad: \"Can\", yas: 35, aktif: true },\n    { id: 4, ad: \"Deniz\", yas: 28, aktif: true }\n];\n\nconst aktifKullanicilarinYasOrtalamasi = kullanicilar\n    .filter(kullanici => kullanici.aktif) \/\/ [{id:1, ad:\"Ahmet\", yas:30, aktif:true}, {id:3, ad:\"Can\", yas:35, aktif:true}, {id:4, ad:\"Deniz\", yas:28, aktif:true}]\n    .map(kullanici => kullanici.yas)     \/\/ [30, 35, 28]\n    .reduce((toplam, yas, index, arr) => {\n        toplam += yas;\n        if (index === arr.length - 1) { \/\/ Son elemana gelindi\u011finde ortalamay\u0131 hesapla\n            return toplam \/ arr.length;\n        }\n        return toplam;\n    }, 0);\n\nconsole.log(aktifKullanicilarinYasOrtalamasi); \/\/ \u00c7\u0131kt\u0131: 31<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>reduce()<\/code> i\u00e7inde <code>index<\/code> ve <code>arr<\/code> parametrelerini kullanarak dizinin sonuna ula\u015f\u0131ld\u0131\u011f\u0131nda ortalamay\u0131 hesaplad\u0131k. Alternatif olarak, <code>reduce()<\/code> ile sadece toplam\u0131 bulup, sonucu dizinin uzunlu\u011funa b\u00f6lebiliriz:<\/p>\n<pre><code class=\"language-javascript\">const aktifKullanicilar = kullanicilar.filter(kullanici => kullanici.aktif);\nconst toplamYas = aktifKullanicilar.map(kullanici => kullanici.yas)\n                                   .reduce((acc, yas) => acc + yas, 0);\nconst ortalamaYas = aktifKullanicilar.length > 0 ? toplamYas \/ aktifKullanicilar.length : 0;\n\nconsole.log(ortalamaYas); \/\/ \u00c7\u0131kt\u0131: 31<\/code><\/pre>\n<p>Bu ikinci yakla\u015f\u0131m, <code>reduce()<\/code> fonksiyonunu daha basit tuttu\u011fu i\u00e7in genellikle tercih edilir.<\/p>\n<h3>Zincirlemenin Faydalar\u0131<\/h3>\n<p>*   <strong>Okunabilirlik:<\/strong> \u0130\u015flemlerin s\u0131ras\u0131n\u0131 net bir \u015fekilde g\u00f6sterir.<br \/>\n*   <strong>K\u0131sal\u0131k:<\/strong> Ara de\u011fi\u015fkenler tan\u0131mlama ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.<br \/>\n*   <strong>\u0130\u015flevsel Stil:<\/strong> Fonksiyonel programlama prensiplerine uygun, deklaratif bir kod yaz\u0131m\u0131n\u0131 te\u015fvik eder.<br \/>\n*   <strong>Performans:<\/strong> Genellikle modern JavaScript motorlar\u0131 bu t\u00fcr zincirlemeleri olduk\u00e7a verimli bir \u015fekilde optimize eder. \u00d6zellikle <code>filter<\/code> i\u015flemini <code>map<\/code> i\u015fleminden \u00f6nce yapmak, <code>map<\/code>&#8216;in daha az eleman \u00fczerinde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayarak performans\u0131 art\u0131rabilir.<\/p>\n<h2>Performans De\u011ferlendirmesi<\/h2>\n<p><code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code> metotlar\u0131, <code>for<\/code> d\u00f6ng\u00fclerine k\u0131yasla daha okunabilir ve fonksiyonel bir yakla\u015f\u0131m sunar. Ancak, performans a\u00e7\u0131s\u0131ndan baz\u0131 geli\u015ftiricilerde soru i\u015faretleri olu\u015fabilir.<\/p>\n<p>Modern JavaScript motorlar\u0131 (V8 gibi), bu dizi metotlar\u0131n\u0131 olduk\u00e7a optimize etmi\u015ftir. \u00c7o\u011fu durumda, geleneksel <code>for<\/code> d\u00f6ng\u00fcleri ile bu metotlar aras\u0131ndaki performans fark\u0131, \u00f6zellikle tipik web uygulamalar\u0131nda i\u015flenen veri boyutlar\u0131 i\u00e7in ihmal edilebilir d\u00fczeydedir.<\/p>\n<p><strong>Ne zaman dikkatli olmal\u0131?<\/strong><br \/>\n*   <strong>\u00c7ok B\u00fcy\u00fck Diziler:<\/strong> Milyonlarca eleman\u0131 olan diziler \u00fczerinde yo\u011fun i\u015flemler yap\u0131l\u0131yorsa, k\u00fc\u00e7\u00fck performans farklar\u0131 birikebilir. Bu gibi ekstrem durumlarda, manuel <code>for<\/code> d\u00f6ng\u00fcleri veya <code>for...of<\/code> d\u00f6ng\u00fcleri, bazen daha iyi performans g\u00f6sterebilir \u00e7\u00fcnk\u00fc her callback \u00e7a\u011fr\u0131s\u0131 i\u00e7in ek bir fonksiyon \u00e7a\u011fr\u0131m maliyeti yoktur.<br \/>\n*   <strong>Zincirleme ve Ara Diziler:<\/strong> Metotlar\u0131 zincirlerken, <code>map()<\/code> ve <code>filter()<\/code> gibi her metot yeni bir dizi olu\u015fturur. Bu, bellekte ge\u00e7ici ara dizilerin olu\u015fmas\u0131na neden olabilir. \u00c7ok uzun zincirler ve \u00e7ok b\u00fcy\u00fck dizilerde bu durum bellek kullan\u0131m\u0131n\u0131 art\u0131rabilir. Ancak, motorlar bu ara dizileri optimize etme e\u011filimindedir.<\/p>\n<p><strong>Genel Kural:<\/strong><br \/>\n\u00c7o\u011fu durumda, kodun okunabilirli\u011fi, s\u00fcrd\u00fcr\u00fclebilirli\u011fi ve yan etkilerden ar\u0131nd\u0131r\u0131lm\u0131\u015f yap\u0131s\u0131, k\u00fc\u00e7\u00fck bir performans fark\u0131ndan daha \u00f6nemlidir. Bu metotlar, kodunuzu daha modern ve anla\u015f\u0131l\u0131r hale getirdi\u011fi i\u00e7in genellikle tercih edilmelidir. Performans dar bo\u011fazlar\u0131 genellikle ba\u015fka yerlerde (DOM manip\u00fclasyonu, a\u011f istekleri vb.) ortaya \u00e7\u0131kar. Ancak, bir performans sorunu tespit edildi\u011finde, o b\u00f6l\u00fcmdeki kodun d\u00f6ng\u00fclerle yeniden yaz\u0131lmas\u0131 bir \u00e7\u00f6z\u00fcm olabilir.<\/p>\n<h2>Fonksiyonel Programlama Paradigmas\u0131 ve Bu Metotlar<\/h2>\n<p><code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code> metotlar\u0131, JavaScript&#8217;in fonksiyonel programlama prensiplerini benimsemesinde kilit rol oynar. Fonksiyonel programlama, programlar\u0131 &#8220;saf&#8221; fonksiyonlar kullanarak olu\u015fturma fikrine dayan\u0131r; bu fonksiyonlar yan etkileri olmayan, ayn\u0131 girdi i\u00e7in her zaman ayn\u0131 \u00e7\u0131kt\u0131y\u0131 \u00fcreten ve d\u0131\u015f d\u00fcnyadan ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015fan fonksiyonlard\u0131r.<\/p>\n<p>Bu metotlar\u0131n fonksiyonel programlamayla nas\u0131l uyumlu oldu\u011funu inceleyelim:<\/p>\n<p>*   <strong>De\u011fi\u015fmezlik (Immutability):<\/strong> <code>map()<\/code> ve <code>filter()<\/code> metotlar\u0131 orijinal diziyi de\u011fi\u015ftirmez (mutate etmez). Bunun yerine, her zaman yeni bir dizi d\u00f6nd\u00fcr\u00fcrler. Bu, veri ak\u0131\u015f\u0131n\u0131 daha \u00f6ng\u00f6r\u00fclebilir hale getirir ve beklenmedik yan etkileri \u00f6nler. De\u011fi\u015fmezlik, \u00f6zellikle paralel programlama ve durum y\u00f6netimi (\u00f6rne\u011fin React\/Redux) gibi alanlarda \u00e7ok de\u011ferlidir. <code>reduce()<\/code> da, callback fonksiyonu i\u00e7inde <code>accumulator<\/code>&#8216;\u0131 do\u011frudan de\u011fi\u015ftirmek yerine yeni bir de\u011fer d\u00f6nd\u00fcrd\u00fc\u011f\u00fcnde de\u011fi\u015fmezlik prensibine uyar.<br \/>\n*   <strong>Saf Fonksiyonlar (Pure Functions):<\/strong> <code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code>&#8216;a parametre olarak verdi\u011fimiz callback fonksiyonlar\u0131n\u0131n &#8220;saf&#8221; olmas\u0131 te\u015fvik edilir. Saf bir fonksiyon:<br \/>\n    *   Ayn\u0131 girdi i\u00e7in her zaman ayn\u0131 \u00e7\u0131kt\u0131y\u0131 \u00fcretir.<br \/>\n    *   D\u0131\u015far\u0131daki bir durumu de\u011fi\u015ftirmez (yan etkisi yoktur).<br \/>\n    *   <code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code> ile kulland\u0131\u011f\u0131m\u0131z callback&#8217;ler bu prensiplere uydu\u011funda, kodumuz daha g\u00fcvenilir, test edilebilir ve anla\u015f\u0131l\u0131r olur.<br \/>\n*   <strong>Deklaratif Programlama:<\/strong> Bu metotlar, ne yap\u0131laca\u011f\u0131n\u0131 (\u00f6rne\u011fin, &#8220;\u00e7ift say\u0131lar\u0131 filtrele&#8221;, &#8220;her eleman\u0131n karesini al&#8221;) deklaratif bir \u015fekilde ifade etmemizi sa\u011flar. Geleneksel <code>for<\/code> d\u00f6ng\u00fcleri ise &#8220;nas\u0131l yap\u0131laca\u011f\u0131n\u0131&#8221; (\u00f6rne\u011fin, &#8220;dizinin ba\u015f\u0131ndan sonuna kadar d\u00f6n, her eleman\u0131 kontrol et, e\u011fer \u00e7iftse yeni diziye ekle&#8221;) imperatif bir \u015fekilde belirtir. Deklaratif kod, genellikle daha y\u00fcksek seviyeli ve okunabilirdir.<br \/>\n*   <strong>Y\u00fcksek Dereceli Fonksiyonlar (Higher-Order Functions):<\/strong> <code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code>&#8216;\u0131n kendileri y\u00fcksek dereceli fonksiyonlard\u0131r \u00e7\u00fcnk\u00fc ba\u015fka fonksiyonlar\u0131 (callback&#8217;leri) arg\u00fcman olarak al\u0131rlar veya fonksiyon d\u00f6nd\u00fcr\u00fcrler. Bu, fonksiyonel programlaman\u0131n temel bir \u00f6zelli\u011fidir ve kodun mod\u00fclerli\u011fini ve yeniden kullan\u0131labilirli\u011fini art\u0131r\u0131r.<\/p>\n<p>Bu metotlar\u0131 kullanarak, JavaScript kodunuzu daha i\u015flevsel, modern ve bak\u0131m\u0131 kolay bir yap\u0131ya kavu\u015fturabilirsiniz.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>JavaScript&#8217;teki <code>map()<\/code>, <code>filter()<\/code> ve <code>reduce()<\/code> metotlar\u0131, modern geli\u015ftirmenin vazge\u00e7ilmez ara\u00e7lar\u0131d\u0131r. Diziler \u00fczerinde d\u00f6n\u00fc\u015f\u00fcm, filtreleme ve \u00f6zetleme gibi yayg\u0131n i\u015flemleri ger\u00e7ekle\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc, esnek ve okunabilir bir yol sunarlar.<\/p>\n<p>*   <strong><code>map()<\/code><\/strong>: Bir dizinin her eleman\u0131n\u0131 d\u00f6n\u00fc\u015ft\u00fcrerek ayn\u0131 uzunlukta yeni bir dizi olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. Veri formatlar\u0131n\u0131 de\u011fi\u015ftirmek veya UI bile\u015fenleri haz\u0131rlamak i\u00e7in idealdir.<br \/>\n*   <strong><code>filter()<\/code><\/strong>: Bir diziden belirli bir ko\u015fulu sa\u011flayan elemanlar\u0131 se\u00e7erek yeni bir dizi olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. Arama, filtreleme ve ge\u00e7ersiz verileri ay\u0131klama i\u015flemlerinde etkilidir.<br \/>\n*   <strong><code>reduce()<\/code><\/strong>: Bir diziyi tek bir \u00e7\u0131kt\u0131 de\u011ferine (say\u0131, nesne, dizi vb.) indirgemek i\u00e7in kullan\u0131l\u0131r. Toplama, ortalama alma, gruplama veya karma\u015f\u0131k veri yap\u0131lar\u0131 olu\u015fturma gibi biriktirme i\u015flemleri i\u00e7in benzersizdir.<\/p>\n<p>Bu metotlar\u0131 zincirleyerek kullanma yetene\u011fi, daha da ak\u0131c\u0131 ve etkili kod yazmam\u0131z\u0131 sa\u011flar. Ayr\u0131ca, de\u011fi\u015fmezlik ve saf fonksiyonlar gibi fonksiyonel programlama prensiplerini benimsememize yard\u0131mc\u0131 olarak daha \u00f6ng\u00f6r\u00fclebilir ve hatas\u0131z uygulamalar geli\u015ftirmemize olanak tan\u0131r.<\/p>\n<p>Ba\u015flang\u0131\u00e7ta <code>reduce()<\/code> metodunun <code>accumulator<\/code> ve <code>initialValue<\/code> kavramlar\u0131 biraz kafa kar\u0131\u015ft\u0131r\u0131c\u0131 gelebilir, ancak pratik yaparak bu metodun derinli\u011fini ve g\u00fcc\u00fcn\u00fc ke\u015ffedeceksiniz. Bu metotlar\u0131 ustaca kullanmak, JavaScript bilginizi bir \u00fcst seviyeye ta\u015f\u0131yacak ve daha temiz, daha s\u00fcrd\u00fcr\u00fclebilir ve daha modern kodlar yazman\u0131z\u0131 sa\u011flayacakt\u0131r. Unutmay\u0131n, en iyi \u00f6\u011frenme yolu denemek ve uygulamakt\u0131r. Bu metotlar\u0131 kendi projelerinizde aktif olarak kullanmaktan \u00e7ekinmeyin!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JavaScript&#8217;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi\nGiri\u015f: Fonksiyonel Programlaman\u0131n Temel Ta\u015flar\u0131\nJavaScript, esnekli\u011fi v","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[129],"tags":[],"class_list":{"0":"post-36055","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-javascript","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JavaScript&#039;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript&#039;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi\" \/>\n<meta property=\"og:description\" content=\"JavaScript&#039;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi Giri\u015f: Fonksiyonel Programlaman\u0131n Temel Ta\u015flar\u0131 JavaScript, esnekli\u011fi v\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-07T10:40:54+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JavaScript&#8217;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi\",\"datePublished\":\"2025-12-07T10:40:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/\"},\"wordCount\":3390,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Javascript\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/\",\"name\":\"JavaScript'te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-07T10:40:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript&#8217;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JavaScript'te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"JavaScript'te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi","og_description":"JavaScript'te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi Giri\u015f: Fonksiyonel Programlaman\u0131n Temel Ta\u015flar\u0131 JavaScript, esnekli\u011fi v","og_url":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-07T10:40:54+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"21 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JavaScript&#8217;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi","datePublished":"2025-12-07T10:40:54+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/"},"wordCount":3390,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Javascript"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/","name":"JavaScript'te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-07T10:40:54+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-map-filter-ve-reduce-metotlarini-kullanma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript&#8217;te map(), filter() ve reduce() Metotlar\u0131n\u0131 Kullanma Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36055"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36055\/revisions"}],"predecessor-version":[{"id":36056,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36055\/revisions\/36056"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}