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. 정리
- some, every 메소드는 true or false 값을 리턴해주므로 콜백함수에 리턴문을 작성해야 한다.
- some 메소드는 빈 배열에 대해 false, every는 빈 배열에 대해 true를 리턴한다.
- some과 every 메소드 둘 다 배열을 순회하다가 조건에 맞는/안맞는 값을 찾으면 바로 반복을 중지한다. 때문에 최악 시간 복잡도는 O(n)이더라도 평균 시간복잡도는 짧다!! (find와 같음)
'알고리즘 > JavaScript' 카테고리의 다른 글
JavaScript로 프로그래머스 풀기, 추억 점수 (4) | 2023.11.20 |
---|---|
JavaScript) 자료구조 Map을 활용하기 (2) | 2023.10.30 |
JavaScript) 배열 메소드 filter와 find 사용하기. (1) | 2023.10.30 |
JavaScript) 배열 메소드 forEach와 map 사용하기. (0) | 2023.10.30 |