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