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>
    // each
    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>
    // reduce
    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));  // --> 16
    // 3번째 값을 사용하지 않은 경우
    console.log(_reduce([1, 2, 3], add));  // --> 6
</script>