[javascript] every와 some

insung·2025년 10월 12일

자바스크립트(JavaScript) 배열의 내장 메서드 중 데이터 유효성 검사나 특정 조건 만족 여부를 간단하게 판별할 때 유용하게 쓰이는 Array.prototype.every()와 Array.prototype.some() 메서드에 대해 포스팅해 보고자 한다.

1. Array.every()

every()는 이름 그대로 배열의 모든 요소가 주어진 조건을 만족하는지 확인한다.

개념

  • 주어진 콜백 함수를 배열의 모든 요소에 대해 한 번씩 실행하며, 모든 요소가 true를 반환할 경우에만 최종적으로 true를 반환.
  • 단 하나의 요소라도 false를 반환하면 즉시 순회를 멈추고 false를 반환 (조건 불일치 시 바로 순회 종료)

예시

  • 모든 숫자가 양수인지 확인하는 예시입니다.

const numbers = [10, 5, 8, 20];
const negativeNumbers = [10, -5, 8, 20];

const allPositive = numbers.every(num => num > 0); 
console.log(`[10, 5, 8, 20]는 모두 양수인가 ${allPositive}`); 
// 출력: [10, 5, 8, 20]는 모두 양수인가 true

// -5가 포함되어 있어 false를 반환하고 즉시 종료됨
const allPositive2 = negativeNumbers.every(num => num > 0);
console.log(`[10, -5, 8, 20]는 모두 양수인가요? ${allPositive2}`); 
// 출력: [10, -5, 8, 20]는 모두 양수인가요? false

2. Array.some()

some()은 배열 내에서 하나라도 주어진 조건을 만족하는 요소가 있는지 확인한다.

개념

  • 주어진 콜백 함수를 배열의 요소에 대해 실행하며, 하나라도 true를 반환하는 요소가 발견되면 즉시 순회를 멈추고 최종적으로 true를 반환.
  • 모든 요소에 대해 콜백을 실행했는데도 true를 반환하는 요소가 없다면 false를 반환.

예시

  • 특정 조건(음수)을 만족하는 요소가 하나라도 있는지 확인하는 예시

const temperatures = [25, 18, -3, 30];
const positiveTemps = [25, 18, 5, 30];

// -3이 포함되어 있어 true를 반환하고 즉시 종료됨
const hasNegative = temperatures.some(temp => temp < 0);
console.log(`[25, 18, -3, 30]에 음수가 포함되어 있나요? ${hasNegative}`); 
// 출력: [25, 18, -3, 30]에 음수가 포함되어 있나? true

// 모든 요소가 양수이므로 false를 반환
const hasNegative2 = positiveTemps.some(temp => temp < 0);
console.log(`[25, 18, 5, 30]에 음수가 포함되어 있나요? ${hasNegative2}`);
// 출력: [25, 18, 5, 30]에 음수가 포함되어 있나? false

3. every()와 some()의 활용

  • 이 두 메서드는 특히 배열의 복잡한 조건 검사 시 for 루프나 forEach를 대체하여 깔끔한 코드를 작성할 수 있도록 도와 줌.

  • every()

    • AND 연산, 모두 조건 만족 → true
    • 데이터 유효성 검사 (예: 모든 필드 입력 여부)
  • some()

    • OR 연산, 하나라도 조건 만족 → true
    • 특정 데이터 존재 여부 확인 (예: 활성 사용자 존재 여부)

const userRoles = ['editor', 'reviewer', 'guest'];

const isAdmin = userRoles.some(role => role === 'admin');

console.log(`관리자 권한 보유 여부 ${isAdmin}`);
// 출력: 관리자 보유 여부 false
profile
안녕하세요 프론트엔드 관련 포스팅을 주로 하고 있습니다

0개의 댓글