formulous

주니어 개발자의 개발 지식 공유 블로그입니다.

JS & TS

[javascript] 배열 검사를 한번에, every와 some함수를 알아봅시다.

formulous 2022. 12. 9. 15:43
728x90

 

 

안녕하세요.

 

오늘은 업무 중 사용했던 유용한 배열 메서드에 대해 소개드리겠습니다.

 

그 주인공은 바로 every() 함수와 some() 함수입니다. 정말 유용한 함수니 꼭 기억해서 써먹으시길 바랍니다!

 

자, 바로 코드 예시를 봅시다.

 

const arr1 = [10, 20, 30, 40, ..., 9999990, 10000000]; // 100만개의 데이터

 

여러분들은 위의 코드 arr1의 모든 요소에 대해서 10으로 나눴을 때 나머지가 0인지 확인하려면 어떤 코드를 사용하실 건가요?

 

혹시 머릿속으로 아래 코드처럼 for문을 떠올리셨나요?

 

const arr1 = [10, 20, 30, 40, ..., 9999990, 10000000]; // 100만개의 데이터
let result = true;

for (const item of arr1){
	if ( item % 10 !== 0) {
        result = false;
	}
}

return result;

 

(절레절레..)

저를 포함해서 개발하시는 분들 중 for문에 대한 거부감이 있으신 분들이 있으실 텐데요.

 

위와 똑같은 기능의 코드를 아래와 같이 every 함수를 이용해 깔끔하게 구현할 수 있습니다.

 

const arr1 = [10, 20, 30, 40, ..., 9999990, 10000000]; // 100만개의 데이터

const result = arr1.every(item => item % 10 === 0);

return result;

 

위와 같이 every() 함수는 지시해준 조건에 따라 false값을 찾을 때까지 각 요소들에 대해 callback 함수를 실행하게 됩니다.

 

간단히 말하자면 "이 조건에 전부 다 true야?" 하고 배열에게 물어보는 것이라 생각하면 됩니다.

 

배열의 모든 값이 주어진 조건에 대해 true일 경우만 true를 반환하는 함수인 거죠.

 

some() 함수는 그 반대라고 생각하시면 됩니다.

 

const arr1 = [10, 20, 30, 40, ..., 9999990, 10000000]; // 100만개의 데이터

const result = !arr1.some(item => item % 10 !== 0);

return result;

 

코드를 위와 같이 작성했을 때,

 

arr1의 요소중 10으로 나눈 나머지가 0이 아닌 요소를 하나라도 발견한 순간 true를 반환하게 됩니다.

 

굳이 또 간단하게 말하자면 "이 조건인 거 있어??"라고 물어보는 것입니다.

 

질문에 대한 답이 "네" 라면 true를 "아녀" 라면 false를 반환하겠죠?

 

위와 같이 some 결과의 반대 값을 result에 대입을 해준다면, 그 위의 every 코드와 동일한 기능을 하게 되는 것입니다.

 

 

여기서 중요한 것은 every의 경우 하나라도 false인 경우, some의 경우 하나라도 true인 경우 순환을 멈춘다는 것입니다!

성능적인 측면에서 for문과 차별되는 확실한 이점이 있는것이죠..!

 

 

앞으로 배열의 요소에 대한 검사를 진행해야 한다면 위와 같이 every() 함수와 some() 함수를 사용해보는 건 어떠신가요?

 

오늘은 배열 요소에 대한 검사를 편리하게 할 수 있는 함수에 대해 알아보았습니다.

 

감사합니다.

 

 

728x90