[TIL]19. 자바스크립트 some 사용할 때 일어난 일

강지수·2025년 1월 23일
0
post-thumbnail

유독 머리가 안굴러 가던 날 프로젝트를 하다가 조건을 어떻게 작성해야 하는지 몰라서 헤메던 일이다.

내가 원하는건 업데이트를 눌렀을 때 리스트에 해당 나라가 없으면 알림창이 뜨는걸 원했다.

내가 생각한 코드는 some이나 every를 사용해서 찾는 방법이었다. 나의 코드를 알아보자.

  • 이전코드
case "update": // 업데이트 버튼 눌렀을 때 발생
  setSubmitList((prev) => {
if (prev.some((item) => item.country !== data.country)) {
    alert("존재하는 국가가 아닙니다. 추가 먼저 해주세요.");
        return prev
      }
    })
  break;

내가 생각한 코드는 prev배열에서 item.country랑 data.country랑 같지 않으면 알림창의 띄우는 코드였다. 같지 않으면 결국 없으니까 알림창을 띄우는 줄 알았다. 근데 내가 생각한 방향과 다르게 흘러갔다. 분명 같은 국가가 있는데도 알림창을 띄우는거였다. 모든 요소를 검사하고 반환하는 조건인줄 알고 짰던거엿다.

역시 생각한대로 안됐는데 이유는 비교하는 첫 요소에서 일치하지 않으면 알림이 떠버렸다. 존재하는 국가가 prev라는 배열 안에 있더라도 첫 요소에서 일치하지 않으면 알림창이 떠버리고 리턴해 버리니까 생각한 대로 안됐던 것이다. 그래서 결국 동료에게 물어보면서 해결했다. 해결한 코드는 이러했다.

  • 수정된 코드
case "update": // 업데이트 버튼 눌렀을 때 발생
  setSubmitList((prev) => {
if (!prev.some((item) => item.country === data.country)) {
    alert("존재하는 국가가 아닙니다. 추가 먼저 해주세요.");
        return prev
      }
    })
  break;

prev에서 서로 일치하는 항목이 하나라도 없을때 라는 조건으로 바꿨다. 나는 처음에 이해를 못했다. 몇번 보고나서 이해를 하고 이런 간단한 조건을 그리 오래 생각했다니 현타가 오기도 했고 나의 사고 방식이 너무 1차원적인가 라며 생각하게 되었다. 그래도 혹시 또 이런일이 있을까봐 이렇게 적어놓는다.

profile
프론트엔드 잘하고 싶다

0개의 댓글

관련 채용 정보