210403. Today I Learned(TIL) : filter 알고리즘 복습

syong·2021년 4월 4일
0

TIL

목록 보기
3/32

filter 메소드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 리턴한다. 이 filter 메소드는 테스트를 실행할 콜백함수를 인자로 받는다. filter 메소드가 어떤 알고리즘으로 기능을 실행시키는지 문제 하나를 통해 알아보자.

문제: 함수와 배열을 입력받아 배열의 각 요소에 함수를 적용했을 때 그 결과가 참인 요소만을 갖는 새로운 배열을 리턴해야 합니다.

입력:
인자1 func: number 타입을 입력받아 boolean 타입을 리턴하는 함수

인자2 arr: number 타입을 요소로 갖는 배열, arr[i]는 0 이상의 정수

출력: 배열을 리턴

우선 filter 메소드는 테스트를 통과한 요소들을 새로운 배열로 리턴해주기 때문에 테스트를 통과한 요소들을 담아줄 새 빈 배열이 필요하다. 따라서 다음과 같이 빈 배열을 선언해준다.

function filterCallback(func, arr) {
const newArr = [];
}

그런 다음 입력받은 배열을 반복문으로 순회하면서 테스트 함수에 적용한 요소가 true 값을 반환하는지 여부를 따져서 선언했던 새 배열에 넣어준다.

function filterCallback(func, arr) {
const newArr = [];
	for(let i = 0; i < arr.length; i++) {
    	if(func(arr[i]) === true) {
        	newArr.push(arr[i]);
            }
          }
          return newArr;
       }  

여기서 func(arr[i])는 입력받은 테스트 함수에 입력받은 배열의 요소를 인자로 주고 실행한 결과값을 뜻한다. 이 결과값이 true라면 테스트를 통과한 요소가 되기 때문에 리턴해줄 새 배열에 추가하게 된다.

이러한 알고리즘으로 filter 메소드의 기능을 이해할 수 있다. filter 메소드가 정확히 어떤 일을 하는지에 대해 이렇게 알고리즘으로 짚고 넘어가면 앞으로 filter 메소드를 사용하기에 있어서 큰 도움이 될 것이다.

0개의 댓글