[TIL]Make_Method

박상훈·2022년 7월 26일

_underBar 프로젝트
고차함수와 여러 메소드를 스스로 만들어보며 공부 관련 포스팅입니다.

_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; // 
};

새로운 배열 얕은 복사를 하는것이 포인트 입니다.

_take

// _.take는 배열의 처음 n개의 element를 담은 새로운 배열을 리턴합니다.
// n이 undefined이거나 음수인 경우, 빈 배열을 리턴합니다.
// n이 배열의 길이를 벗어날 경우, 전체 배열을 shallow copy한 새로운 배열을 리턴합니다.
_.take = function (arr, n) {
 if(n === undefined || n < 0) n =0;
  else if( n > arr.length) n = arr.length;
}

for(let i = 0; i < n; i++;){
 result.push(arr[i]; 
}
return result;

_drop

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

  for(let i = n; i < arr.length; i++){
    result.push(arr[i]); // arr.shift 로 빼기
  }
  return result;
};

_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 i in collection){
    iteratee(collection[i] , i , collection)
  }
}
};

arr.forEach를 사용하는 이유는 for 문 대신 사용하는 용도입니다.

_indexOf

// _.indexOf는 target으로 전달되는 값이 arr의 요소인 경우, 배열에서의 위치(index)를 리턴합니다.
// 그렇지 않은 경우, -1을 리턴합니다.
// target이 중복해서 존재하는 경우, 가장 낮은 index를 리턴합니다.
_.indexOf = function (arr, target) {
  // 배열의 모든 요소에 접근하려면, 순회 알고리즘(iteration algorithm)을 구현해야 합니다.
  // 반복문을 사용하는 것이 가장 일반적이지만, 지금부터는 이미 구현한 _.each 함수를 활용하여야 합니다.
  // 아래 _.indexOf의 구현을 참고하시기 바랍니다.
  let result = -1;

  _.each(arr, function (item, index) {
    if (item === target && result === -1) {
      result = index;
    }
  });

  return result;
};

indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫번째 인덱스를
반환하고 존재 않으면 -1을 반환합니다.

profile
다들 좋은 하루 되세요

0개의 댓글