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;
}
}
어렵다..코딩테스트 문제 풀기 참 어렵다..
'JavaScript' 카테고리의 다른 글
[Javascript]웹팩 --스크랩 (0) | 2023.03.07 |
---|---|
[Javascript]SPA Netlify로 배포 feat. memory limits 에러 (0) | 2023.03.05 |
[Routing]SPA - frontend router (1) | 2023.02.22 |
[JavaScript]async (0) | 2023.02.03 |
[VScode]노드몬 실행이 안 될 때 ! -스크랩 (0) | 2023.02.01 |