JavaScript | Array.forEach()에서 break 걸기 - some(), every()

설탕·2023년 3월 8일
0
post-thumbnail

Array.forEach()에서 특정 조건을 만족하면 break를 걸고 싶어서 찾아봤는데
Array.forEach() 는 기본적으로 break문을 따로 지원하지 않는다고 한다.
대신 Array.some(), Array.every() 메서드를 사용하면 break처럼 쓸 수 있다.

Array.some()

배열 안의 어떤 요소라도 주어진 판별 함수를 적어도 하나라도 통과하는지 테스트
= 배열 안에서 요소 하나라도 콜백 함수 반환값이 true면 순회 멈추고 true 반환하는 메서드

return truebreak
return falsecontinue

some() MDN 설명

some 메서드는 반복 메서드입니다. 이 메서드는 주어진 callbackFn함수가 참 같은 값을 반환할 때까지 배열 안에 있는 각각의 요소마다 한 번씩 호출합니다. 만약 그러한 요소를 찾았으면 some() 메서드는 그 즉시 true를 반환하며 배열 순회를 멈춥니다. 그렇지 않고 callbackFn이 모든 요소에 대해 거짓같은 값을 반환하면 some()false를 반환합니다.

some() 요약

배열 쭉 돌면서 배열 요소마다 하나씩 콜백 함수 시험해 보고

  • 어? true 발견? 즉시 멈춤 → 최종 true 뱉음
  • false false false... 끝까지 다 돌았는데 전부 false? → 최종 false 뱉음
let numbers = [0, 1, 2, 3, 4, 5];

numbers.some((num) => {
  console.log(num);
  if (num === 2)
    return true;
  else
    return false;
});

// 출력: 0, 1, 2

Array.every()

배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트
= 배열 안에서 요소 하나라도 콜백 함수 반환값이 false면 순회 멈추고 false 반환하는 메서드

return falsebreak
return truecontinue

every() MDN 설명

everycallbackFn거짓을 반환하는 요소를 찾을 때까지 배열에 있는 각 요소에 대해 한 번씩 callbackFn 함수를 실행합니다. 해당하는 요소를 발견한 경우 every는 즉시 false를 반환합니다. 그렇지 않으면, 즉 모든 값에서 참을 반환하면 true를 반환합니다.

every() 요약

배열 쭉 돌면서 배열 요소마다 하나씩 콜백 함수 시험해 보고

  • 어? false 발견? 즉시 멈춤 → 최종 false 뱉음
  • true true true... 끝까지 다 돌았는데 전부 true? → 최종 true 뱉음
let numbers = [0, 1, 2, 3, 4, 5];

numbers.every((num) => {
  console.log(num);
  if (num === 2)
    return false;
  else
    return true;
});

// 출력: 0, 1, 2

그래도 forEach()에서 break를 걸고 싶다면

forEach()는 return true / false 상관 없이 continue 되고, 최종적으로 undefined를 반환한다.

return값으로는 break를 걸 수 없기 때문에 예외 처리를 해서 강제로 반복문에서 벗어나는 방법이 있다.

throw Error & try catch

throw Error로 예외를 발생시키면 try 블록이 종료되면서 반복문도 종료되고 catch 블록으로 넘어간다.

let numbers = [0, 1, 2, 3, 4, 5];

try {
  numbers.forEach((num) => {
    console.log(num);
    if (num === 2) throw new Error();
  });
} catch (error) {
  console.log('escaped!');
}

// 출력: 0, 1, 2, 'escaped!'

참고: [JS] 📚 자바스크립트 forEach()에 break거는 방법

profile
공부 기록

0개의 댓글