FRONT-END/TIL

[TIL] 230121 filter & includes

서근 2023. 1. 22. 16:48
반응형

문제점

오늘은 filter() 메서드와 includes() 메소드를 사용해 함수의 인자값 중 특정한 값을 출력하려고 해 보았다.

function solution(s) {
    let result;

    
}
solution([1, 2, 3, 4, 5]);

시도

우선 filter() 메서드 함수 내부에서 사용해서 일단 인자값을 모두 출력해보고자 했다.

function solution(s) {
    s.filter((value) => console(value));
}
solution([1, 2, 3, 4, 5]);  

//TypeError: console is not a function

콘솔 오류가 났다. 왜냐하면 filter() 메서드는 반드시 이 트러블 객체만 사용가능하기 때문이다.

해결 방법

function solution(...s) {
    s.filter((value) => console.log(value));
}
solution(['1', '2', '3', '4', '5']);

//[ '1', '2', '3', '4', '5' ]

위에선 solution 함수의 인자값을 이터러블 객체로 넣어줬고, 하나하나 빼야 하는데 그것을 빼기 위해선 solution함수의 매개변수에 스프레드 문법을 사용하면 된다.

 

이제 인자값을 하나 하나 빼줬으니 '2'를 제외한 나머지는 버리고 인자값에 2가 있으면 그 값만 return 해보자.

function solution(...s) {
    let num = s.filter((value) => value.includes(2));
    console.log(num);
}
solution('1', '2', '3', '4', '5');

includes() 메서드를 이용해서 2가 함수 인자값에 있으면 그 값만 빼주면 되는 것인데, 위에서 인자값은 배열 안에 값이 있었고, 지금은 인자값에 배열이 존재하지 않는다.

 

함수의 매개변수에  스프레드를 사용하면 인자값을 배열로 만들어주기 때문에 이점을 유의해야 했다. 그래서 최종적으로 [ '2' ] 만 리턴하게 되었다.