callback
배열의 각 요소에 대하여 한번씩 실행한다.
accumulator
콜백의 반환값을 누적한다.
currentValue
처리할 현재 요소
currentIndex (optional)
처리할 현재 요소의 인덱스
array (optional)
reduce를 호출한 배열
initialValue (optional)
최초 호출에서 첫번째 인수로 제공하는 값
initalValue가 주어진 경우에 처음 accumulator는 initialValue가 되고 currentValue는 첫번째 값이 된다. initialValue가 주어지지 않은 경우에는 처음 accumulator는 배열의 첫번째 값이 되고, currentValue는 두번째 값이 된다.
var people = [
{ name: 'Alice', age: 21 },
{ name: 'Max', age: 20 },
{ name: 'Jane', age: 20 }
];
function reducer(acc,curr) {
let key = curr[groupBy.property];
if(!acc[key]) {
acc[key] = [];
}
acc[key].push(curr);
return acc;
}
function groupBy(array, property) {
return array.reduce(reducer,{});
}
const ageGroupby = groupBy(people,'age');
console.log(ageGroupby);
/*
[object Object] {
undefined: [[object Object] {
age: 21,
name: "Alice"
}, [object Object] {
age: 20,
name: "Max"
}, [object Object] {
age: 20,
name: "Jane"
}]
}
*/