Метод reduce. Не понятен 1 из аргументов

Есть следующая функция, которая определяет сколько повторений символов в массиве:

let array = [2, 2, 2, 3, 4, 1, 1, 1]

function test(array) {
  return array.reduce((acc, item) => ((acc[item] = (acc[item] || 0) + 1), acc), {})
}

console.log(test(array))

И никак не могу понять, зачем нужна переменная «acc» в самом конце метода reduce, еще и через запятую, и в скобках. И почему в результате числа выстраиваются именно в правильной последовательности от меньшего - к большему?


Ответы (1 шт):

Автор решения: Алексей Шиманский

зачем нужна переменная «acc» в самом конце метода reduce

callback данного метода должен обязательно что-то вернуть. acc написан через запятую, для того, чтобы "лайфхаком" вернуть как раз значение в этой переменной. Например если в консоли напишите 1,2,3,4 то в консоли отобразится только 4. Ну или даже так:

function test() {
    return 1,2,3,4;
}
test();

Вернётся только 4. Так что это просто чтобы не писать return acc

почему в результате числа выстраиваются именно в правильной последовательности от меньшего - к большему

Потому что возвращается объект с нумерованными ключами, а не массив. У объекта с нумерованными ключами значения возвращаются в порядке возрастания

→ Ссылка