reduce
делает эту функцию более сложной, чем на самом деле. (reduce
чрезмерно используется, и почти всегда неправильный инструмент по сравнению с простым l oop.) Вот та же функция без лишних reduce
, с объяснением:
function groupBy(objectArray, property) {
// The object we'll return with properties for the groups
let result = {}
// Loop through the array
for (const obj of objectArray) {
// Get the key value
let key = obj[property]
// If the result doesn't have an entry for that yet, create one
if (!result[key]) {
result[key] = []
}
// Add this entry to that entry
result[key].push(obj)
}
// Return the grouped result
return result
}
reduce
версия просто передает result
(как acc
): reduce
вызывает обратный вызов с начальным значением ({}
, которое вы видите в конце вызова reduce
) и первой записью, которая является обратным вызовом получает как acc
и obj
. Затем обратный вызов выполняет работу одной записи и возвращает acc
, что означает, что он получает ее снова при следующем проходе.