본문 바로가기
JavaScript

[JavaScript]some메서드

by hans-j 2023. 2. 28.

some() 메서드는 JavaScript에서 기본적으로 제공되는 메서드 중 하나로, 주어진 조건을 만족하는 요소가 배열 내에 적어도 하나 이상 있는지 확인하는 메서드입니다. 만족하는 요소가 적어도 하나 이상 있다면 true를 반환하고, 그렇지 않다면 false를 반환합니다.

 

const arr = [1, 2, 3, 4, 5];
const hasEvenNumber = arr.some((num) => num % 2 === 0);
console.log(hasEvenNumber); // Output: true

 이 예시에서는 숫자 배열 arr에서 some() 메서드를 호출합니다. 메서드는 배열 내에 적어도 하나의 요소가 짝수인지 확인하기 위해, 조건으로 화살표 함수를 사용합니다: num % 2 === 0. 배열에는 짝수인 2가 있기 때문에, some() 메서드는 true를 반환합니다.

 

 solution() 함수에서 some() 메서드는 큐 내에서 현재 문서보다 우선순위가 높은 문서가 적어도 하나 이상 있는지 확인하기 위해 사용됩니다.

 

 메서드는 큐 내의 각 문서의 우선순위가 현재 문서의 우선순위보다 높은지, 그리고 문서의 인덱스가 currentIndex와 같지 않은지 확인하는 콜백 함수를 인수로 받습니다.

 

적어도 하나의 문서가 이 조건을 만족한다면, 큐 내에 현재 문서보다 우선순위가 높은 문서가 하나 이상 있다는 의미이므로 some() 메서드는 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

 


여기까지가 설명.

 

쉽게 말해서 some메서드는 || / OR 연산자라고 보면된다.

 

이 메서드는 조건 중 한개만 만족하면 true값을 반환한다.

 

모든 값이 만족되어야만 반환되는 AND operator과는 다르다.

 

 

그럼 or 연산자 쓰지 왜 some()쓰냐고?

 

배열이니까!!!


 

some() 메서드는 배열과 함께 사용할 수 있도록 디자인된 메서드로, 배열 내에서 주어진 조건을 만족하는 요소가 적어도 하나 이상 있는지 확인할 수 있습니다.

 

이 메서드는 배열 내의 요소 중 적어도 하나가 특정 기준을 충족하는 경우에만 어떤 작업을 수행하려는 경우에 특히 유용합니다.

 

현재 문서보다 우선순위가 높은 문서가 큐 내에 적어도 하나 이상 있는지 확인해야하기 때문입니다. 이 작업은 문서 배열을 반복하는 것을 포함하므로, some() 메서드는 이를 수행하기에 편리한 방법을 제공합니다.

 

반면, 논리 OR 연산자는 배열과 함께 사용하기에는 적합하지 않습니다.

 


반면, 논리 OR(||) 연산자는 두 개 이상의 표현식을 평가하고, 적어도 하나가 참이면 true를 반환합니다. 이 연산자는 조건문이나 기본 매개변수 표현식에서 자주 사용됩니다.


한 예시에서는

  const hasHigherPriority = queuesome((doc,index) => doc.priority && index !== currentIndex);
  //현재 문서보다 높은 우선순위를 가진 문서가 큐 내에 하나 이상 있는지 확인하기 위해 some() 메서드를 사용한 예제

이렇게 && 연산자가 사용되어있다.

 

적어도 한 개만 본다면서 왜 굳이 AND 연산자를 썼냐면

  const hasHigherPriority = queuesome((doc,index) => doc.priority || index !== currentIndex);

이렇게 OR 연산자를 써버리면 두 조건 중 하나라도 참이면 반환 된다.

 

이는 실제 우선순위와 관계없이,

0보다 큰 우선순위를 가진 모든 문서가 현재 문서보다 높은 우선순위를 가진 것으로 간주한다.

JavaScript에서 0을 제외한 모든 숫자는 truthy이기 때문.

 

사실 찾아보면서도 좀 헷갈려서... 대안을 찾아봤다.

 

이렇게 for문을 사용해도 가능하다.

for (let i = 0; i < priorities.length; i++) {
      if (priorities[i] > currentDoc) {
        hasHigherPriority = true;
        break;
      }
    }

어렵다..코딩테스트 문제 풀기 참 어렵다..