Как разобраться с поиском максимального значения в массиве при помощи reduce?
есть массив
let a = [1, 2, 3, 4];
При помощи метода reduce находим максимальное значение
let a = [1, 2, 3, 4];
let c = a.reduce((sum, current) => sum < current ? current : sum);
console.log(c);
Как я понял, в теле стрелочной функции записано условие, что если следующий элемент массива больше суммы предыдущих элементов, то этот следующий элемент возвращается и записывается в sum, если меньше, то sum остается.
Вопрос: Правильно ли я понял логику данного метода и зачем в sum записывать current, если current больше sum?
Ответы (2 шт):
Как я понял, в теле стрелочной функции записано условие, что если следующий элемент массива больше суммы предыдущих элементов, то этот следующий элемент возвращается и записывается в sum, если меньше, то sum остается.
Правильно ли я понял логику данного метода?
Нет, логика данного метода другая.
Метод .reduce проходит по всем элементам массива, передавая первым параметром в callback результат, полученный на предыдущем шаге.
Простым аналогом данного кода мог стать следующий:
var sum = a[0];
for(var i=1; i<a.length; i++){
var current = a[i];
if (sum < current){
sum = current;
}
}
Таким образом, по окончании цикла, в переменной sum будет значение максимального элемента.
Метод reduce() выполняет функцию callback один раз для каждого элемента, присутствующего в массиве, за исключением пустот, принимая четыре аргумента: начальное значение (или значение от предыдущего вызова callback), значение текущего элемента, текущий индекс и массив, по которому происходит итерация.
[1, 2, 3, 4].reduce((accumulator, currentValue, index, array) => {}, initialValue);
При первом вызове функции, параметры accumulator и currentValue могут принимать одно из двух значений. Если при вызове reduce() передан аргумент initialValue, то значение accumulator будет равным значению initialValue, а значение currentValue будет равным первому значению в массиве. Если аргумент initialValue не задан, то значение accumulator будет равным первому значению в массиве, а значение currentValue будет равным второму значению в массиве.
Функция переданная в reduce() должна возвращать значение accumulator для следущей итерации.