data
<script>
var users = [
{ name: "a", age:14 },
{ name: "b", age:31 },
{ name: "c", age:30 },
{ name: "d", age:35 },
{ name: "e", age:38 },
{ name: "f", age:40 },
{ name: "g", age:39 },
{ name: "h", age:41 },
{ name: "i", age:58 },
{ name: "j", age:48 },
{ name: "k", age:49 }
];
</script>
rest
<script>
function _rest(list, start) {
var ret = [];
start = start || 0
_each(list, function (item, index, list) {
if (index >= start) {
ret.push(item);
}
})
return ret;
}
</script>
each
<script>
function _each(list, func) {
for (var i = 0, endi = list.length; i < endi; ++i) {
func(list[i], i, list);
}
}
</script>
reduce
- 리듀서 인자값
- 1번재 - 배열
- 2번째 - 함수
- 3번째 - 시작값(optional)
- 2번째로 인자로 받은 함수를 재귀적으로 호출하면서 값을 축약해 나가는형태.
<script>
function _reduce(list, iter, memo) {
if (arguments.length === 2) {
list = _rest(list, 1);
memo = list[0];
}
_each(list, function (value) {
memo = iter(memo, value);
});
return memo;
}
var add = function (a, b) {
return a + b;
}
console.log(_reduce([1, 2, 3], add, 10));
console.log(_reduce([1, 2, 3], add));
</script>