[TIL] underscore.js(1)

underscore.js란 무엇인가?
underscore.js는 기본 JavaScript 객체들을 확장하지 않고, 함수형 프로그래밍을 지원할 수 있는 100가지 이상의 함수를 가진 유용한 JavaScript 라이브러리다.

underscore.js에서 함수들을 그룹별로 정리하면 아래와 같다.
utilities: 유틸리티 함수
collection: 배열 또는 객체가 될 수 있다.
arrays: 배열을 다루는 함수
objects: 객체를 다루는 함수
functions: 함수를 다루는 함수

오늘 문제를 풀면서 어려웠거나 자주 쓰일 것 같다고 생각한 것들

_.each
_.each(list, iteratee)
list: colletion으로써, 배열이나 객체가 될 수 있다.
iteratee: list의 각 element(value)를 반복적으로 돌리는 함수이다.

함수구현

_.each = function (collection, iteratee) {
  let keys = Object.keys(collection)

  if(Array.isArray(collection)) {
    for(let i = 0; i < collection.length; i++) {
      iteratee(collection[i], i, collection)
    }
  } else if(typeof(collection) === 'object') {
    for(let i = 0; i < keys.length; i++) {
      iteratee(collection[keys[i]], keys[i], collection)
    }
  }
};

_.filter
filter _.filter(list, predicate)
list: colletion으로써, 배열이나 객체가 될 수 있다.
predicate: list의 각 element(value)의 결과값이 truth인지 확인하는 test 함수이다.
--> list의 각 element(value)를 predicate 함수를 돌려, 값이 truth인 것만 배열의 element로 리턴한다.

함수 구현

_.filter = function (arr, test) {
  let result = [];

  _.each(arr, function(i) {
    if(test(i)) {
      result.push(i)
    }
  })
  return result;
};

_.reduce
reduce _.reduce(list, iteratee, acc)
list: colletion으로써, 배열이나 객체가 될 수 있다.
iteratee: list의 각 element(value)를 반복적으로 돌리는 함수이다.
acc: iteratee 함수의 인자로 사용될 초기 값을 말한다.(생략가능)
--> list의 각 element(value)를 iteratee 함수를 돌려, 하나의 값으로 리턴한다.

함수 구현

_.reduce = function (arr, iteratee, initVal) {
  let acc = initVal;                            

  _.each(arr, function(el, index, arr) {   
    if(acc === undefined) {             
      acc = arr[0];
    } else {
      acc = iteratee(acc, el, index, arr)  
    }
  })
  return acc;                        
};

좋은 웹페이지 즐겨찾기