Источник
Оба 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
, но в двух словах подумайте, что будет короче, а в конечном итоге - лучше.