Kaynak
Hem map
ve reduce
girdi olarak dizi ve tanımlayan bir işlevi vardır. Bir şekilde tamamlayıcıdırlar: map
birden çok öğeden oluşan bir dizi için tek bir öğe reduce
döndüremezken, sonunda değiştirdiğiniz akümülatörü her zaman döndürecektir.
map
map
Sizi kullanarak öğeleri yinelersiniz ve her öğe için istediğiniz bir öğeyi döndürürsünüz.
Örneğin, bir dizi sayıya sahipseniz ve karelerini almak istiyorsanız, bunu yapabilirsiniz:
const square = x => x * x
console.log([1, 2, 3, 4, 5].map(square))
reduce
Bir diziyi girdi olarak kullanarak, accumulator
ve current_element
parametrelerini alan geri çağırma işlevine (ilk bağımsız değişken) dayalı olarak tek bir öğe (diyelim ki bir Nesne veya Sayı veya başka bir Dizi) elde edebilirsiniz :
const numbers = [1, 2, 3, 4, 5]
console.log(numbers.reduce(function (acc, current) {
return acc + current
}, 0))
console.log(numbers.reduce(function (acc, current) {
return acc * current
}, 1))
Her ikisiyle de aynı şeyi yapabileceğiniz zaman hangisini seçmelisiniz? Kodun nasıl göründüğünü hayal etmeye çalışın. Verilen örnek için, aşağıdaki kullanarak squares dizisini bahsettiğiniz gibi hesaplayabilirsiniz reduce
:
[1, 2, 3, 4, 5].reduce(function (acc, current) {
acc.push(current*current);
return acc;
}, [])
[1, 2, 3, 4, 5].map(x => x * x)
Şimdi, bunlara baktığımızda, açıkça görülüyor ki ikinci uygulama daha iyi görünüyor ve daha kısa. Genellikle, bu durumda daha temiz olan çözümü seçersiniz map
. Tabii ki bunu yapabilirsiniz reduce
, ama kısaca, hangisinin daha kısa olacağını ve sonunda daha iyi olacağını düşünün.