Как разобраться с поиском максимального значения в массиве при помощи 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 шт):

Автор решения: Grundy

Как я понял, в теле стрелочной функции записано условие, что если следующий элемент массива больше суммы предыдущих элементов, то этот следующий элемент возвращается и записывается в 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 будет значение максимального элемента.

→ Ссылка
Автор решения: an_parubets

Метод 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 для следущей итерации.

→ Ссылка