formulous

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

JS & TS

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

formulous 2022. 12. 9. 15:43

 

 

안녕하세요.

 

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

 

그 주인공은 바로 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() 함수와 some() 함수를 사용해보는 건 어떠신가요?

 

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

 

감사합니다.