map: hər elementi dəyiş
Tutaq ki, [1, 2, 3] massivindəki hər ədədi ikiqat artırmaq istəyirsən. map hər element üçün funksiyanı işlədir və nəticələrdən yeni massiv yaradır.
const numbers = [1, 2, 3];
const doubled = numbers.map(
number => number * 2
);
console.log(doubled); // [2, 4, 6]
console.log(numbers); // [1, 2, 3]
number => number * 2 hər dəfə bir ədəd alır və onun ikiqatını qaytarır. Nəticədə yenə üç element var. İlkin massiv dəyişmir.
filter: uyğun elementləri saxla
İndi yalnız 2-dən böyük və ya ona bərabər ədədləri istəyək. filter şərtə uyğun gələnləri yeni massivə yığır.
const numbers = [1, 2, 3];
const selected = numbers.filter(
number => number >= 2
);
console.log(selected); // [2, 3]
Burada 1 şərtə uyğun gəlmir, ona görə nəticədə yoxdur. Heç bir element uyğun gəlməsə, boş massiv — [] alınır.
find: ilk uyğun elementi tap
Siyahı yox, yalnız bir element lazımdırsa, find istifadə et. O, ilk uyğun elementi qaytarır.
const numbers = [1, 2, 3];
const firstMatch = numbers.find(
number => number >= 2
);
const missing = numbers.find(
number => number > 10
);
console.log(firstMatch); // 2
console.log(missing); // undefined
Qısa seçim qaydası: çevirmək üçün map, seçmək üçün filter, birini tapmaq üçün find.
Yadda saxla
Bu metodlara verdiyin funksiyaya callback deyilir. Qısa oxlu yazıda nəticə avtomatik qaytarılır. Fiqurlu mötərizə ilə gövdə yazanda return əlavə et:
const doubled = [1, 2, 3].map(number => {
return number * 2;
});
Bu metodların özü ilkin massivi sıralamır və ya ondan element silmir. Amma callback daxilində obyektin xassəsini birbaşa dəyişsən, həmin obyekt yenə dəyişər. Yeni obyekt yaratmaq üçün items.map(item => ({ ...item, active: true })) yazmaq olar.
Bir neçə əməliyyatı ardıcıl da edə bilərsən: əvvəl filter ilə seç, sonra map ilə çevir. find nəticəsinin mövcudluğunu yoxlamadan onun xassəsinə müraciət etmə.