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>

each

  • Array.prototype.forEach 기능 구현
<script>
   function _each(list, func) {
        for (var i = 0, endi = list.length; i < endi; ++i) {
            func(list[i], i)
        }
    }
    // use
    _each(users, function(item, index, list){
        console.log(item, index, list)
    });
</script>

filter

  • Array.prototype.filter 기능 구현
<script>
    function _filter(list, func) {
        var ret = [];
        _each(list, function (item, index) {
            if (func(item, index)) {
                ret.push(item)
            }
        })
        return ret;
    }
    // use - 40세 이상 
    var result = _filter(
        users,
        function(item, index, list){
            return item.age >= 40
        }
    );
    console.log(result);
</script>

map

  • Array.prototype.map 기능 구현
<script>
    function _map(list, func) {
        var ret = [];
        _each(list, function (item, index) {
            ret.push(func(item, index));
        })
        return ret;
    }
    // use - 성별 가져오기
    var result = _map(users,
        function(item, index, list){
            return item.age
        }
    );
    console.log(result);
</script>

filter, map 응용

<script>
  // 40세 이상 이름 필터
  var result = _map(
    _filter(users, function(item, index, list){
        return item.age >= 40;
    }),
    function(item, index, list){
        return item.name;
    }
  )
  console.log(result);
</script>