[TIL -2022.7.26 고차함수 만들기 ]

Jeong Ha Seung·2022년 7월 26일
0

부트캠프

목록 보기
22/51

오늘 공부한 내용

_.slice

_.slice = function (arr, start, end) {
  let _start = start || 0, 
    _end = end;

  if (start < 0) _start = Math.max(0, arr.length + start);
  if (end < 0) _end = Math.max(0, arr.length + end);
  if (_end === undefined || _end > arr.length) _end = arr.length;

  let result = [];

  for (let i = _start; i < _end; i++) {
    result.push(arr[i]);
  }

  return result; //immutable
};

_.take

_.take = function (arr, n) {
  if (n === undefined || n < 0 || n === 0) return [];
  if (n > arr.length) return arr;
  return _.slice(arr, 0, n); //처음 n개의 element를 담은 새로운 배열 리턴
};

_.drop

_.drop = function (arr, n) {
  if (n === undefined || n < 0 || n === 0) return _.slice(arr);
  if (n > arr.length) return [];
  return _.slice(arr, n); //_.slice(arr,n,arr.length)와 같음
};
_.each = function (collection, iteratee) {
  if (Array.isArray(collection)) {
    for (let i = 0; i < collection.length; i++) {
      iteratee(collection[i], i, collection);
    }
  } else if (typeof collection === "object") {
    for (let key in collection) {
      iteratee(collection[key], key, collection);
    }
  }
};

_.pluck

//_.each를 이용한 방법
let result = [];
_.each(arr, function (item) {
  result.push(item[keyOrIdx]);
});
return result;

//_.map을 이용한 방법
// 내가 짠 코드
  let result = [];
  _.map(arr, (item) => {
    return item ? result.push(item[keyOrIdx]) : undefined;
  });
  return result;

//다른 방법
return _.map(arr, (arr) => arr[keyOrIdx]);

pluck 함수는 설명부터 제대로 이해가 안 가서 다시 천천히 봐야겠다.

느낀 점

오늘은 underscore.js에 있는 Docs를 토대로 비슷하게 구현을 시간을 가졌는데 Bare Minimum은 그나마 괜찮았는데 Advanced부터 막히기 시작했다... 클로저랑 비동기 함수가 힌트로 주어지긴 했는데 그래도 접근을 어떻게 해야할지 감이 안온다. 나중에 꼭 풀어봐야지.
아무튼 이번 과제를 통해 느낄 수 있었던 것은 이렇게 구현한 함수를 통해서 기존 코드를 리팩토링하거나 새로운 프로젝트에 접근할 수 있지 않을까라는 생각을 했다. 어렵지만 좋은 경험이었다.

profile
블로그 이전했습니다. https://nextjs-blog-haseungdev.vercel.app/

0개의 댓글