TIL 작성 2021 10/13

Jelkov Ahn·2021년 10월 13일
0

TIL

목록 보기
20/29
post-thumbnail

underbar

  • map
_.map = function (arr, iteratee) {
  // TODO: 여기에 코드를 작성합니다.
  // _.map 함수는 매우 자주 사용됩니다.
  // _.each 함수와 비슷하게 동작하지만, 각 요소에 iteratee를 적용한 결과를 리턴합니다.
  let result = [];

  _.each(arr, function (item) {
    result.push(iteratee(item));
  });

  return result;
};
  • pluck
_.pluck = function (arr, keyOrIdx) {
  // _.pluck을 _.each를 사용해 구현하면 아래와 같습니다.
  // let result = [];
  // _.each(arr, function (item) {
  //   result.push(item[keyOrIdx]);
  // });
  // return result;

  // _.pluck은 _.map을 사용해 구현하시기 바랍니다.
  // TODO: 여기에 코드를 작성합니다.
  return _.map(arr, function (item) {
    return item[keyOrIdx];
  });
};
  • reduce
_.reduce = function (arr, iteratee, initVal) {
  // TODO: 여기에 코드를 작성합니다.
  let accumulator = initVal;

  _.each(arr, function (item, idx, src) {
    if (initVal === undefined && idx === 0) {
      accumulator = item;
    } else {
      accumulator = iteratee(accumulator, item, idx, src);
    }
  });

  return accumulator;
};
  • once
_.once = function (func) {
  // 아래 변수들은 아래 선언/리턴되는 함수 안에서 참조됩니다.
  // 리턴되는 함수의 scope 내에 존재하므로, 리턴되는 함수를 언제 실행해도 이 변수들에 접근할 수 있습니다.
  let result;
  let alreadyCalled = false;

  return function (...args) {
    // TIP: arguments 키워드 혹은, spread operator를 사용하세요.
    if (!alreadyCalled) {
      alreadyCalled = true;
      result = func(...args);
    }
    return result;
  };
};
  • every
_.every = function (arr, iteratee) {
  // TODO: 여기에 코드를 작성합니다.
  if (iteratee === undefined) {
    iteratee = _.identity;
  }

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

Rest parameter vs Spread Syntax

  • Rest parameter : 값들을 뭉쳐서 만드는 것.
    함수에 전달된 인수들은 배열로 전달이 된다.
profile
끝까지 ... 가면 된다.

0개의 댓글