var slice = Array.prototype.slice;
function _rest(list, num) {
return slice.call(list, num || 1);
}
function _reducer(list, iter, memo) {
if(arguments.length === 2) {
memo = list[0];
// list = list.slice(1);
// slice는 array의 메서드... 이 reducer는 array일 경우에만 사용 가능
// 하지만 유사 배열에서도 사용할 수 있도록 바꿔야된다.
list = _rest(list);
}
_each(list, function(val) {
memo = iter(memo, val);
})
return memo;
}
console.log(
_reducer([1, 2, 3], add, 0));
// output : 6
// 동작방식
// memo = add(0, 1)
// memo = add(memo, 2);
// memo = add(memo, 3);
// return memo
// 3번째 memo 인자 생략 가능
console.log(
_reducer([1,2,3], add));
// 동작방식
// add(add(1,2),3);