29 Ağustos 2022 • 23 dakikalık okuma
JavaScript map, filter, reduce fonksiyonları ile daha az kod ile dizi işlemleri kolayca yapılabilmektedir.
Map, eşleştirme metodudur. Verilen işlemi tüm dizi elemanları için çalıştırır ve sonucu yeni dizi olarak döndürür. Örneğin; tüm dizi değerleri 10 ile çarpılıyor;
var arrayNumbers = [1, 2, 3, 4, 5, 6, 7, 8];
var arrayMapResult = arrayNumbers.map(function (item, index, array) {
console.log("item :", item);
console.log("index :", index);
console.log("array :", array);
return item * 10;
});
console.log("arrayMapResult :", arrayMapResult);
// SONUÇ: [ 10, 20, 30, 40, 50, 60, 70, 80 ]
Daha kısa yazım yöntemleri ile de kullanılabilir;
var arrayNumbers = [1, 2, 3, 4, 5, 6, 7, 8];
var arrayMapResult2 = arrayNumbers.map((item, index, array) => {
console.log("item :", item);
console.log("index :", index);
console.log("array :", array);
return item * 10;
});
console.log("arrayMapResult2 :", arrayMapResult2);
// SONUÇ: [ 10, 20, 30, 40, 50, 60, 70, 80 ]
var arrayNumbers = [1, 2, 3, 4, 5, 6, 7, 8];
var arrayMapResult3 = arrayNumbers.map(item => {
console.log("item :", item);
return item * 10;
});
console.log("arrayMapResult3 :", arrayMapResult3);
// SONUÇ: [ 10, 20, 30, 40, 50, 60, 70, 80 ]
var arrayNumbers = [1, 2, 3, 4, 5, 6, 7, 8];
var arrayMapResult4 = arrayNumbers.map(item => item * 10);
console.log("arrayMapResult4 :", arrayMapResult4);
// SONUÇ: [ 10, 20, 30, 40, 50, 60, 70, 80 ]
Örneğin dizideki tüm şehir isimleri map fonksiyonu ile büyük harfe çevrilebilir;
var cities = [
{ "code": 39, "cityName": "Kırklareli", "region": "Marmara" },
{ "code": 40, "cityName": "Kırşehir", "region": "İç Anadolu" },
{ "code": 41, "cityName": "Kocaeli", "region": "Marmara" },
{ "code": 42, "cityName": "Konya", "region": "İç Anadolu" },
{ "code": 43, "cityName": "Kütahya", "region": "Ege" },
{ "code": 44, "cityName": "Malatya", "region": "Doğu Anadolu" },
{ "code": 45, "cityName": "Manisa", "region": "Ege" },
{ "code": 46, "cityName": "Kahramanmaraş", "region": "Akdeniz" },
{ "code": 47, "cityName": "Mardin", "region": "Güneydoğu Anadolu" },
{ "code": 48, "cityName": "Muğla", "region": "Ege" }
];
var cityNamesUppercase = cities.map(item => item.cityName.toUpperCase()); // şehir adını büyütür ve sadece şehir adını döndürür.
var citiesUppercase = cities.map(item => { item.cityName = item.cityName.toUpperCase(); return item; }); // şehir adını büyütür ve nesneyi döndürür.
console.log("cityNamesUppercase:", cityNamesUppercase);
// SONUÇ: [ "KIRKLARELI", "KIRŞEHIR", "KOCAELI", "KONYA", "KÜTAHYA", "MALATYA", "MANISA", "KAHRAMANMARAŞ", "MARDIN", "MUĞLA" ]
console.log("citiesUppercase:", citiesUppercase);
/* SONUÇ: [
{ code: 39, cityName: "KIRKLARELI", region: "Marmara" },
{ code: 40, cityName: "KIRŞEHIR", region: "İç Anadolu" },
{ code: 41, cityName: "KOCAELI", region: "Marmara" },
{ code: 42, cityName: "KONYA", region: "İç Anadolu" },
{ code: 43, cityName: "KÜTAHYA", region: "Ege" },
{ code: 44, cityName: "MALATYA", region: "Doğu Anadolu" },
{ code: 45, cityName: "MANISA", region: "Ege" },
{ code: 46, cityName: "KAHRAMANMARAŞ", region: "Akdeniz" },
{ code: 47, cityName: "MARDIN", region: "Güneydoğu Anadolu" },
{ code: 48, cityName: "MUĞLA", region: "Ege" }
]
*/
Filter, süzme metodudur. Verilen koşul ile eşleşen dizi elemanlarını yeni bir dizi olarak döndürür. Örneğin dizi içerisinden sadece çift sayılar filtreleniyor;
var arrayNumbers = [1, 2, 3, 4, 5, 6, 7, 8];
var arrayFilterResult = arrayNumbers.filter(function (item, index, array) {
console.log("item :", item);
console.log("index :", index);
console.log("array :", array);
return item % 2 === 0;
});
console.log("arrayFilterResult :", arrayFilterResult);
// SONUÇ: [ 2, 4, 6, 8 ]
Daha kısa yazım yöntemleri ile de kullanılabilir;
var arrayFilterResult2 = arrayNumbers.filter((item, index, array) => {
console.log("item :", item);
console.log("index :", index);
console.log("array :", array);
return item % 2 === 0;
});
console.log("arrayFilterResult2 :", arrayFilterResult2);
// SONUÇ: [ 2, 4, 6, 8 ]
var arrayFilterResult3 = arrayNumbers.filter(item => {
console.log("item :", item);
return item % 2 === 0;
});
console.log("arrayFilterResult3 :", arrayFilterResult3);
// SONUÇ: [ 2, 4, 6, 8 ]
var arrayFilterResult4 = arrayNumbers.filter(item => item % 2 === 0);
console.log("arrayFilterResult4 :", arrayFilterResult4);
// SONUÇ: [ 2, 4, 6, 8 ]
Örneğin dizideki sadece Marmara Bölgesi şehirleri filter fonksiyonu ile alınabilir;
var cities = [
{ "code": 39, "cityName": "Kırklareli", "region": "Marmara" },
{ "code": 40, "cityName": "Kırşehir", "region": "İç Anadolu" },
{ "code": 41, "cityName": "Kocaeli", "region": "Marmara" },
{ "code": 42, "cityName": "Konya", "region": "İç Anadolu" },
{ "code": 43, "cityName": "Kütahya", "region": "Ege" },
{ "code": 44, "cityName": "Malatya", "region": "Doğu Anadolu" },
{ "code": 45, "cityName": "Manisa", "region": "Ege" },
{ "code": 46, "cityName": "Kahramanmaraş", "region": "Akdeniz" },
{ "code": 47, "cityName": "Mardin", "region": "Güneydoğu Anadolu" },
{ "code": 48, "cityName": "Muğla", "region": "Ege" }
];
var citiesInMarmara = cities.filter(item => item.region === "Marmara");
console.log("citiesInMarmara :", citiesInMarmara);
/* SONUÇ: [
{ "code": 39, "cityName": "Kırklareli", "region": "Marmara" },
{ "code": 41, "cityName": "Kocaeli", "region": "Marmara" }
];
*/
Reduce azaltma, küçültme metodudue. Verilen işlem sonucuna göre tüm dizi elemanları için tek bir değer döndürür. Örneğin tüm dizi değerleri toplanıyor;
var arrayNumbers = [1, 2, 3, 4, 5, 6, 7, 8];
var resultSum = arrayNumbers.reduce(function (previousReturn, current, index, array) {
console.log("previousReturn :", previousReturn);
console.log("index :", index);
console.log("current :", current);
console.log("array :", array);
return previousReturn + current;
}, 0);
console.log("resultSum :", resultSum);
// SONUÇ: 36
Daha kısa yazım yöntemleri ile de kullanılabilir;
var resultSum2 = arrayNumbers.reduce((previousReturn, current, index) => {
console.log("previousReturn :", previousReturn);
console.log("index :", index);
console.log("current :", current);
return previousReturn + current;
}, 0);
console.log("resultSum2 :", resultSum2);
// SONUÇ: 36
var resultSum3 = arrayNumbers.reduce((previousReturn, current) => {
console.log("previousReturn :", previousReturn);
console.log("current :", current);
return previousReturn + current;
});
console.log("resultSum3 :", resultSum3);
// SONUÇ: 36
var resultSum4 = arrayNumbers.reduce((previousReturn, current) => previousReturn + current);
console.log("resultSum4 :", resultSum4);
// SONUÇ: 36
Örneğin dizideki en küçük kod değeri reduce fonksiyonu ile bulunabilir;
var cities = [
{ "code": 39, "cityName": "Kırklareli", "region": "Marmara" },
{ "code": 40, "cityName": "Kırşehir", "region": "İç Anadolu" },
{ "code": 41, "cityName": "Kocaeli", "region": "Marmara" },
{ "code": 42, "cityName": "Konya", "region": "İç Anadolu" },
{ "code": 43, "cityName": "Kütahya", "region": "Ege" },
{ "code": 44, "cityName": "Malatya", "region": "Doğu Anadolu" },
{ "code": 45, "cityName": "Manisa", "region": "Ege" },
{ "code": 46, "cityName": "Kahramanmaraş", "region": "Akdeniz" },
{ "code": 47, "cityName": "Mardin", "region": "Güneydoğu Anadolu" },
{ "code": 48, "cityName": "Muğla", "region": "Ege" }
];
var minimumValue = cities.reduce((min, item) => item.code < min ? item.code : min, cities[0].code);
console.log("minimumValue :", minimumValue);
// SONUÇ: 39
Örneğin dizideki bölgeye göre şehir sayısı bulunabilir;
var cities = [
{ "code": 39, "cityName": "Kırklareli", "region": "Marmara" },
{ "code": 40, "cityName": "Kırşehir", "region": "İç Anadolu" },
{ "code": 41, "cityName": "Kocaeli", "region": "Marmara" },
{ "code": 42, "cityName": "Konya", "region": "İç Anadolu" },
{ "code": 43, "cityName": "Kütahya", "region": "Ege" },
{ "code": 44, "cityName": "Malatya", "region": "Doğu Anadolu" },
{ "code": 45, "cityName": "Manisa", "region": "Ege" },
{ "code": 46, "cityName": "Kahramanmaraş", "region": "Akdeniz" },
{ "code": 47, "cityName": "Mardin", "region": "Güneydoğu Anadolu" },
{ "code": 48, "cityName": "Muğla", "region": "Ege" }
];
var groupByRegionCount = cities.map(city => city.region).reduce((previousValue, currentValue) => {
if (previousValue[currentValue] == null) {
previousValue[currentValue] = 1;
} else {
++previousValue[currentValue];
}
return previousValue;
}, {});
console.log("groupByRegionCount :", groupByRegionCount);
// SONUÇ: { "Marmara": 2, "İç Anadolu": 2, "Ege": 3, "Doğu Anadolu": 1, "Akdeniz": 1, "Güneydoğu Anadolu": 1 }