
Array.forEach()에서 특정 조건을 만족하면 break를 걸고 싶어서 찾아봤는데
Array.forEach() 는 기본적으로 break문을 따로 지원하지 않는다고 한다.
대신 Array.some(), Array.every() 메서드를 사용하면 break처럼 쓸 수 있다.
Array.some()배열 안의 어떤 요소라도 주어진 판별 함수를 적어도 하나라도 통과하는지 테스트
= 배열 안에서 요소 하나라도 콜백 함수 반환값이 true면 순회 멈추고 true 반환하는 메서드
return true → break
return false → continue
some()MDN 설명
some메서드는 반복 메서드입니다. 이 메서드는 주어진callbackFn함수가 참 같은 값을 반환할 때까지 배열 안에 있는 각각의 요소마다 한 번씩 호출합니다. 만약 그러한 요소를 찾았으면some()메서드는 그 즉시true를 반환하며 배열 순회를 멈춥니다. 그렇지 않고callbackFn이 모든 요소에 대해 거짓같은 값을 반환하면some()은false를 반환합니다.
some() 요약배열 쭉 돌면서 배열 요소마다 하나씩 콜백 함수 시험해 보고
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 false → break
return true → continue
every()MDN 설명
every는callbackFn이 거짓을 반환하는 요소를 찾을 때까지 배열에 있는 각 요소에 대해 한 번씩callbackFn함수를 실행합니다. 해당하는 요소를 발견한 경우every는 즉시false를 반환합니다. 그렇지 않으면, 즉 모든 값에서 참을 반환하면true를 반환합니다.
every() 요약배열 쭉 돌면서 배열 요소마다 하나씩 콜백 함수 시험해 보고
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 catchthrow 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!'