JavaScript의 내장 every 함수와 some 함수는 Array, Iterator, TypedAray에 각각 적용되어, 데이터 유형에 따라 일관되게 조건 검사를 수행할 수 있다.
- every : 배열의 모든 요소가 조건을 만족할 때만 true 를 반환, 하나라도 조건에 맞지 않으면 false.
- some : 배열의 요소 중 하나라도 조건을 만족하면 true 를 반환, 모든 요소가 조건에 맞지 않으면 false.
- every 와 some 모두 콜백 함수를 통해 조건을 정의한다.
유의사항
Javascipr의 내장 every 와 some 함수는 Array와 TypedArray에서만 직접 사용할 수 있다
- 이터레이터 객체 (Map, Set 등)에는 every 와 some 함수가 직접 제공되지 않으므로, 이터레이터의 값을 배열로 변환하여 사용할 수 있다.
- 예를 들어, Set 객체에 대해 every 를 사용하려면, [...mySet.values()].every(...) 와 같이 변환 후 사용해야 한다.
every
1. Array.prototype.every
일반 배열에서 every 를 호출하면, 배열의 각 요소가 지정한 조건을 모두 만족하는지 검사한다.
const numbers = [1, 2, 3, 4, 5]
const allPositive = numbers.every(num => num > 0); // true
2. Iterator.prototype.every
Javascript의 이터레이터 객체에서 every 를 호출할 수 있다. 이터레이터는 Map 이나 Set 과 같은 객체에서 .values() 또는 .entries() 메서드를 사용해 생성할 수 있는 객체로, 각 값을 순회할 수 있게 해준다.
const mySet = new Set([1, 2, 3, 4]);
const allEven = [...mySet].every(value => value % 2 === 0); // false
3. TypedArray.prototype.every
TypedArray는 정수나 부동소수점 숫자를 위한 배열로, Int8Array, Unit8Array 등의 형태로 사용된다. TypedArray 에서도 every 를 호출할 수 있다.
const typedArray = new Unit8Array([1, 2, 3]);
const allPositive = typedArray.every(num => num > 0); // true
각각의 every 는 배열처럼 데이터의 각 요소를 특정 조건으로 검사할 수 있도록 동일한 인터페이스를 제공하며, Array, Iterator, TypedArray 모두에서 유사하게 사용된다.
some
1. Array.prototype.some
일반 배열에서 some 을 호출하면, 배열 요소 중 하나라도 지정한 조건을 만족하는지 검사한다.
const numbers = [1, 2, 3, 4, 5];
const hasEven = numbers.some(num => num % 2 === 0); // true
2. Iterator.prototype.some
이터레이터 객체에서도 some 을 사용할 수 있다. 이터레이터는 Map 이나 Set 의 값이나 키-값 쌍을 순회할 때 사용된다.
const mySet = new Set([1, 3, 5, 7]);
const hasEven = [...mySet].some(value => value % 2 === 0); // false
3. TypedArray.prototype.some
TypedArray에서도 some 을 사용할 수 있다. 이 경우에도 모든 요소 중 하나라도 조건을 만족하면 true 를 반환한다.
const typedArray = new Unit8Array([1, 3, 5]);
const hasEven = typedArray.some(num => num % 2 === 0); // false
some 은 데이터 유형과 관계없이 특정 조건을 충족하는 요소가 하나라도 있는지 검사하는 동일한 메커니즘을 제공한다.
Lodash 와 JavaScript 의 내장 함수 every, some 는 어떻게 다를까?
- 적용 대상의 범위
JavaScript 내장 함수 (Array.prototype.every 와 Array.prototype.some):
- 배열에만 사용 가능하다
- 배열의 모든 요소 또는 일부 요소가 특정 조건을 충족하는지 검사하는 용도로 사용된다
Lodash의 _.every 와 _.some:
- 배열뿐만 아니라 객체, Map, Set 등 다양한 데이터 타입에 적용 가능하다
- Lodash 함수들은 일반 객체나 JSON 구조에서도 조건 검사를 수행할 수 있어, 복잡한 데이터 구조에서의 유효성 검사를 더 유연하게 처리할 수 있다. - 조건 처리의 유연성
Lodash의 _.every, _.some 함수는 배열 외 객체를 다룰 때도 편리한 방식으로 조건을 설정할 수 있도록 지원한다.
예를 들어, Lodash는 단순 조건 객체를 제공할 수 있다. ( _.every(items, { checked: true }) ). 이를 통해 JSON 데이터 내의 모든 객체에 특정 속성이 있는지 또는 특정 값이 설정되어 있는지 간단하게 검사할 수 있다.
예시 비교
- JavaScript 내장 함수로 배열에서 모든 요소가 조건을 만족하는지 검사:
const array = [1, 2, 3, 4];
array.every(num => num > 0)
- Lodash 함수로 객체에서 모든 속성이 조건을 만족하는지 검사:
const items = { a: 1, b: 2, c: 3 };
_.every(items, val => val > 0)
'JavaScript' 카테고리의 다른 글
[JavaScript] 정규식 (0) | 2024.11.16 |
---|---|
[JavaScript] this (2) | 2024.11.10 |
[JavaScript] == (느슨한 비교) 와 === (엄격한 비교) (0) | 2024.11.09 |
[JavaScript] Truthy와 Falsy 값 (2) | 2024.11.09 |
[JavaScript] 변수 선언하기: ver, let, const (1) | 2024.11.09 |