새소식

자바 스크립트

Lodash 패키지를 직접 만들어보자~

  • -
728x90

이전에 기초적인 자바스크립트 메소드들이 없을때는 사설 메소드 패키지인 lowdash를 가져다 썼다고 한다.

// _.take는 배열의 처음 n개의 element를 담은 새로운 배열을 리턴합니다.
// n이 undefined이거나 음수인 경우, 빈 배열을 리턴합니다.
// n이 배열의 길이를 벗어날 경우, 전체 배열을 shallow copy한 새로운 배열을 리턴합니다.
_.take = (arr, n) => {
  // TODO: 여기에 코드를 작성합니다.
  // 두번째 매개변수가 없으면, 빈배열을 반환합니다.
  // 차례대로 n개의 요소를 가지는 배열 리턴

  if (n === undefined || n === 0) {
    return [];
  } else {
    let temp_list = [];
    let _end = n;
    if (_end > arr.length) {
      return arr;
    }
    for (let i = 0; i < n; i++) {
      temp_list[i] = arr[i];
    }
    return temp_list;
  }
};

lowdash의 take 메소드는 배열에서 첫번째 인자부터 차례대로 가져와서 새로운 리스트를 반환한다. 

그 조건에는 초기에 n 값이 음수이거나 undefined 이면 빈배열을 리턴해야했다.  조건문에서는 (||) or 가 둘중 하나만 만족한다 하더라도 뒤에 실해운을 시키게 된다. 

 

잘못된 값을 N으로 넣으면 입력한 배열과 같은 배열을 넣기도 한다. 

 

마지막으로n 번만큼 templist에 넣어 그 값을 반환한다.

 

 

 

2. Last 메소드

1. n이 들어오지 않을 경우 . arr[arr.length - 1] 를 통해 마지막 배열의 원소를 빼준다. 

2. arr.length < n 조건을 활용해, 매개변수로 받은 n이 배열의 길이보다 클때 그대로 arr를 반환한다.

3 마지막으로 [arr.length -n +i]를 인덱스로 받아 마지막 부분에 있는 원소들을 새로운 배열 empty에 넣어 반환합니다.

 

 

 

3. each 


_.each = (collection, iteratee) => {
  // TODO: 여기에 코드를 작성합니다.
  // 문제 1. 배열을 입력받은 경우, 배열을 순회하면서 배열의 요소에 접근할 수 있어야 합니다
  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)
		
	}
  }

forEach 함수의 근간이 each 메소드를 만들어 봤다.

조건과 예시는 아래와 같다.

첫번째 조건문에서 Array.isArray(colletcion)을 통해 배열인지 확인한다. 

iteratee : 각 요소에 적용할 콜백함수를 현재 요소, 현재 인덱스, 전체 배열에 대해 호출합니다. 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.