Джерело
Обидва map
і reduce
мають як вхід масив і функцію, яку ви визначаєте. Вони певним чином доповнюють map
один одного : не можуть повернути один елемент для масиву з декількох елементів, тоді як reduce
завжди повернуть накопичувач, який ви з часом змінили.
map
Використовуючи map
ітерацію елементів, і для кожного елемента ви повертаєте потрібний елемент.
Наприклад, якщо у вас є масив чисел і ви хочете отримати їх квадрати, ви можете зробити це:
const square = x => x * x
console.log([1, 2, 3, 4, 5].map(square))
reduce
Використовуючи масив як вхідні дані, ви можете отримати один єдиний елемент (припустимо, об’єкт, або число, або інший масив) на основі функції зворотного виклику (перший аргумент), яка отримує параметри accumulator
та current_element
:
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))
Який із них вибрати, коли можна робити те саме з обома? Спробуйте уявити, як виглядає код. У наведеному прикладі ви можете обчислити масив квадратів, як ви вже згадали, використовуючи 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)
Тепер, дивлячись на них, очевидно, що друга реалізація виглядає краще і вона коротша. Зазвичай ви вибираєте чистіший розчин, який у цьому випадку є map
. Звичайно, ви можете це зробити reduce
, але, в двох словах, подумайте, що було б коротшим, і з часом це було б краще.