프로그래머스 각도기 자바스크립트 | Array.prototype.filter()

Chaeyeon Lee·2023년 5월 18일
0

🔅 1. 아이디어

딱히 별 다른 기똥찬 방법이 생각나지 않아서 if, else if를 써서 해결했다.

🧑‍💻 2. 내 코드

function solution(angle) {
    if(0<angle && angle<90)
        {return 1;}
    else if(angle==90)
        {return 2;}
    else if(90<angle && angle<180)
        {return 3;}
    else {return 4;}
}

🐣 3. 개념

다른 사람의 풀이를 구경하다가 filter()를 발견했다.

📌 Array.prototype.filter()

위 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 '새로운 배열'로 반환한다.
filter()는 호출되는 배열을 변화시키지 않는다.
또한 filter() 호출 시작 이후로 배열에 추가/삭제되는 요소는 반영되지 않는다.

arr.filter(callback(element[, index[, array]])[, thisArg])

element :

처리할 현재 요소로, arr의 각 요소를 나타낸다. 즉, arr의 첫번째 요소부터 마지막 요소까지 모두 순회하며 조건에 맞으면 해당 요소만을 뽑아 새로운 배열에 추가한다는 것이다.

index(option) :

처리할 현재 요소의 인덱스

[0, 90, 91, 180].filter(x => angle>=x).length
  1. 위 코드에서 x는 처음에 0이 된다. 주어진 angle이 0보다 크거나 같다면 0은 새로운 배열에 추가된다. 아니면 쓰루
  2. 그 다음 x는 90이 되고, 위 과정을 반복한다.
  3. 여기서부터가 좀 천재적인데, angle이 만약 70이라면, 새로운 배열은 [0]이고 .length로 인해 1이 반환된다!
    angle이 91이라면, 새로운 배열은 [0, 90, 91]이고, .length로 인해 3이 반환된다!

Array.prototype.filter()의 반환값이 조건에 해당하는 '새로운 배열'임을 알고 있어야 쓸 수 있는 코드였다.

filter()를 활용한 다른 문제

https://blog.naver.com/lcyeon46/223087185275


📌 삼항연산자 심화

다른 사람의 풀이인데, 삼항연산자를 사용했다.

function solution(angle) {
    return angle < 90 ? 1 : angle === 90 ? 2 : angle < 180 ? 3 : 4;
}

개인적으로 삼항연산자를 중첩해서 쓰는 걸 안 좋아하는데, 그 이유는
1. 내가 고민을 많이 해야함
2. 읽기에 어려움. 뜻이 이해 안 됨
그렇지만 한 줄에 쓰기엔 좋아서 나중에 참고하기 위해 기록해 놓는다.

profile
프론트엔드 개발자 지망생

0개의 댓글