알고리즘/JavaScript

JavaScript) 배열 메소드 some과 every 사용하기

홍구리당당 2023. 10. 30. 21:59

0. 오늘의 배울 것

배열 메소드의 some과 every를 알아보자!

이름 그대로 some은 배열 내에 조건을 만족하는 요소가 1개 이상 있는지, every는 배열 내에 요소가 모두 조건을 만족하는지 알려는 메소드이다.

사실 필자는 filter, find 메소드만 잘 활용하면 되지 않을까 싶긴 하다. every 메소드는 몰라도 특히 some 메소드는, find 메소드와 거의 비슷하기 때문에... 시간 복잡도 면에서도 큰 차이가 없어보인다.

이번 포스팅에서는 some과 every 메소드를 간단하게 알아보고 넘어가자.

1. 배열 메소드 some

다른 배열 메소드와 마찬가지로 some 메소드의 인자로 콜백 함수를 받고, 콜백 함수에는 최대 3개의 인자를 받을 수 있다.

const nums = [1, 2, 3, 4, 5];

const someReturn = nums.some((el) => el > 3);

console.log(someReturn); // true 출력

some 메소드는 true, false 이 두 가지 타입의 값만 리턴한다. 즉, 배열 내에 조건을 만족하는 원소가 한 개 이상 있다면 true, 하나도 없다면 false를 리턴한다.

이를 find 메소드로 구현한다 하면, 아래와 같이 작성될 것이다.

const nums = [1, 2, 3, 4, 5];

const someReturn = nums.find((el) => el > 3);

console.log(someReturn ? true : false); // true 출력

단순히 true false 만 볼 거라면 some을 쓰는 게 더 낫긴 하겠지만, 굳이 외워서 쓸 필요는 없어 보인다.

대신 주의할 점은, 빈 배열에 대해 some 메소드를 사용하면 바로 false를 리턴한다는 것이다.

const arr = [];
const someReturn = arr.some((el, i) => el > 3);
console.log(someReturn); // false 리턴함.

빈 배열을 확인 하기 위해 some 메소드를 쓸까도 싶었지만, 가독성 측면에선 arr.length === 0 를 쓰는 게 더 나아보인다.

2. 배열 메소드 every

다른 배열 메소드와 마찬가지로 every 메소드의 인자로 콜백 함수를 받고, 콜백 함수에는 최대 3개의 인자를 받을 수 있다.

그리고 true, false 이 두 가지 타입의 값만 리턴한다. 즉, 배열 내에 원소가 모두 조건을 만족하면 true, 한 개 이상 조건을 충족하지 못하면 바로 false를 리턴한다.

const nums = [1, 2, 3, 4, 5];

const everyReturn = nums.every((el) => el > 3);

console.log(everyReturn); // false 출력.

참고로 every 문은 빈 배열에 대해 무조건 true를 리턴한다.

const arr = [];
const everyReturn = arr.every((el, i) => el > 3);
console.log(everyReturn); // true 리턴함.

3. 정리

  1. some, every 메소드는 true or false 값을 리턴해주므로 콜백함수에 리턴문을 작성해야 한다.
  2. some 메소드는 빈 배열에 대해 false, every는 빈 배열에 대해 true를 리턴한다.
  3. some과 every 메소드 둘 다 배열을 순회하다가 조건에 맞는/안맞는 값을 찾으면 바로 반복을 중지한다. 때문에 최악 시간 복잡도는 O(n)이더라도 평균 시간복잡도는 짧다!! (find와 같음)