underbar

안윤경·2022년 7월 26일
0

과제

목록 보기
9/20

underbar과제

1.identity
이 함수는 underbar의 기능 구현 및 테스트를 위해 재사용되는 함수입니다.(계속 반복시킴)

_.identity = function (val) {
  // TODO: 여기에 코드를 작성합니다.
  return val;
};

2.take

_.take = function (arr, n) {
  // TODO: 여기에 코드를 작성합니다.
  let _n = n;
  if (_n === undefined || _n < 0) _n = 0;
  return _.slice(arr, 0, _n);//n이 배열을 넘어설때는 slice에 조건이 있으므로 따로안써줘도 되는듯하다
};

3.drop

_.drop = function (arr, n) {
  // TODO: 여기에 코드를 작성합니다.
  let _n = n;
  if (_n === undefined || _n < 0) _n = 0;
  return _.slice(arr, _n, arr.length);
};

3.last

_.last = function (arr, n) {
  // TODO: 여기에 코드를 작성합니다.
  let _n = n;
  if (_n === undefined || _n < 0) _n = 1;//마지막에서 1을 빼면 그다음값이 마지막요소이기 때문?
  return _.drop(arr, arr.length - _n);//arr.length - _n의 값은 시작값 끝값은 정해지지 않은 것
}; //이건 레퍼런스
_.last = function (arr, n) {
  // TODO: 여기에 코드를 작성합니다.
  if(n===undefined || n <0){
   return _.slice(arr,arr.length-1,arr.length);
  }
  if(n>arr.length){
    return[...arr]
  } //따로 조건을 안달아줘도 됨
  let c= _.drop(arr,arr.length-n,arr.length);
  return c;
};

4.each

_.each = function (collection, iteratee) {
  // TODO: 여기에 코드를 작성합니다.
  if (Array.isArray(collection)) {
    for (let i = 0; i < collection.length; i++) {
      iteratee(collection[i], i, collection);
    }
  } else {
    for (let key in collection) {
      iteratee(collection[key], key, collection);
    }
  }
};

5.filter

_.filter = function (arr, test) {
  // TODO: 여기에 코드를 작성합니다.
  let result =[];
  _.each(arr, (ele, idx,arr)=>{//원래는 function(item)처럼 인자한개만 줘서했으나 더 정확하게 하려면 인자3개 다 넣는게 좋다
    if(test(ele,idx,arr)){
     result.push(ele);
    };
  });
  return result;
};

6.reject

_.reject = function (arr, test) {
  // TODO: 여기에 코드를 작성합니다.
  // TIP: 위에서 구현한 `filter` 함수를 사용해서 `reject` 함수를 구현해 보세요.
  let result = [];
  _.each(arr, function(item){
    if(!test(item)){
      result.push(item);
    }
  });
  return result;
};

7.uniq

_.uniq = function (arr) {
  // TODO: 여기에 코드를 작성합니다.
  let result = [];

  _.each(arr, function (item) {
    if (_.indexOf(result, item) === -1) {//result배열에 item이라는 요소가 -1 즉,존재하지 않을때를 나타냄
      result.push(item);
    }
  });

  return result;
};

8.map

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

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

  return result;
};

9.pluck

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

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

  return result;
};
또는 map을 사용해서
return _.map(arr,arr=>arr[keyOrIdx])

10.reduce

_.reduce = function (arr, iteratee, initVal) {
  // TODO: 여기에 코드를 작성합니다.
  let acc = initVal;
  _.each(arr, (ele, idx, arr)=>{
    if(acc === undefined){
      acc = arr[0];
    }else {
      acc = iteratee( acc, ele, idx,arr);
    }
  });
  return acc;
};
  • 조건은 알겠지만 직접 메소드들을 만들어서 써보려고 하니 너무어렵다 특히 indexof와 reduce쪽에서 많이 헷갈렸다
profile
프론트엔드 개발자 안윤경입니다

0개의 댓글