7주차 과제 Review

김진권·2021년 9월 4일
0

code review

목록 보기
3/4

1. 요구 사항

7주차 과제는 함수를 완성하는 것


2. 개선해야 할 사항

1) Javascript

1️⃣ for ... in문은 생성자 함수의 프로토타입중 열거 가능한 모든 속성을 나열하기 때문에 방어 코드가 필요하다.

  _.each = function (collection, iterator) {
    if (Array.isArray(collection)) {
      for (let i = 0; i < collection.length; i++) {
        iterator(collection[i], i, collection);
      }

      return;
    }

    for (let key in collection) {
      iterator(collection[key], key, collection);
    }

다음을 참고하자.
hasOwnProperty
for...in hasOwnProperty

2️⃣ filter를 사용해서도 풀 수 있으니 한번 도전해 보자!

  _.reject = function (collection, test) {
    const answer = [];

    _.each(collection, function (item) {
      if (!test(item)) answer.push(item);
    });

    return answer;
  };

➡️

    return _.filter(collection, function (item) {
      return !test(item);
    });

3️⃣ reduce를 잘 재사용 했다.
하지만 reduce를 사용하면 불필요하게 모든 배열을 순회하게 되기 때문에, 중간에 falsy value가 있다면 그 즉시 false를 리턴하는식으로 작성해보자
모든 배열을 불필요하게 돌지 않아도 되기 때문에 시간복잡도를 조금이라도 더 개선할 수 있다.

  _.every = function (collection, iterator) {
    // TIP: Try re-using reduce() here.
    if (iterator === undefined) iterator = _.identity;

    return _.reduce(
      collection,
      function (memo, item) {
        if (memo) {
          return memo = iterator(item) ? true : false;
        }
        return false;
      },
      true
    );

➡️

    if (iterator === undefined) iterator = _.identity;

    const defaultValue = true;

    for (let i = 0; i < collection.length; i++) {
      if (!iterator(collection[i])) return false;
    }

    return defaultValue;

4️⃣ arguments로 접근할 수도 있지만 spread연산자를 활용하면 화살표 함수에서도 arguments에 접근할 수 있기 때문에 스프레드 연산자를 많이 사용한다.

   _.extend = function (obj) {
➡️  _.extend = function (...args) {

3. 멘토님의 평가

안녕하세요 진권님!
문제 정말 잘 푸셔서 코멘트 드릴게 별로 없네요 😅
memoize부분도 주말동안 잘 완성시켜보면 좋을거 같아요!
memoize는 한번 계산한 값은 두번 다시 구하지 않는다는 목적으로 만들어진 함수입니다.
arguments에 따라 이미 계산한 값이면 이전에 계산한 값을 리턴하여서 시간복잡도를 공간복잡도로 대체하는 함수입니다.
클로저, 메모 라는 키워드로 접근하셔서 해결해보셨으면 좋겠습니다.
한주동안 고생하셨습니다. 다음주도 진권님의 코드 기대할게요. 화이팅하세요!🎉

profile
start!

0개의 댓글

관련 채용 정보