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 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!'