Array.prototype.some()
사용법
some()
함수는
배열의 특정 조건을 만족하는 요소가 있는지 확인합니다.
하나의 요소라도 조건을 만족하면 true
를 반환하고 그렇지 않으면 false
를 반환합니다.
이 함수는 배열 요소를 순회하며, 주어진 콜백 함수의 조건을 만족하는 요소가 하나라도 있는지 판별합니다.
다음은 배열의 요소에서 숫자 7
이 하나라도 있는지를 some()
함수로 확인하는 예제입니다.
/* 숫자 7이 하나라도 있는지를 확인할 배열 */
const numbers = [1, 3, 5, 7, 8];
/* 요소가 숫자 7인지 판별하는 콜백함수 */
function callbackFn (element) {
return element === 7;
}
/* 숫자 7이 하나라도 있는지 확인하는 some() 함수 적용 */
const hasSevenNumber = numbers.some(callbackFn);
console.log(hasSevenNumber); // true
some()
함수의 형식은 다음과 같습니다.
구문
arr.some(callback(element[, index[, array]])[, thisArg])
arr
은 some()
함수를 적용할 배열입니다.
매개변수
callbackFn |
배열의 각 요소를 처리하는 콜백 함수입니다. 콜백 함수는 배열의 요소를 전달받고, 조건을 만족하면 true 를 반환합니다. 하나의 요소라도 true 를 반환하면 some() 함수는 즉시 true 를 반환하고, 모든 요소가 조건을 만족하지 않으면 false 를 반환합니다.
콜백 함수의 매개변수: callbackFn(element[, index[, array]])
|
---|---|
thisArg |
옵션. callbackFn 함수 내부에서 사용할 this 값으로 사용할 값입니다. |
첫 번째 매개변수인 콜백 함수(callbackFn
)과 관련되어 함수의 형태별 구문 형식은 다음과 같습니다.
// 화살표 함수
some((element) => { /* … */ })
some((element[, index]) => { /* … */ })
some((element[, index[, array]]) => { /* … */ })
// 콜백 함수
some(callbackFn)
some(callbackFn[, thisArg])
// 인라인 콜백 함수
some(function (element) { /* … */ })
some(function (element[, index]) { /* … */ })
some(function (element[, index[, array]]) { /* … */ })
some(function (element[, index[, array]]) { /* … */ }[, thisArg])
반환 값
- 배열의 요소 중 하나라도 콜백 함수의 조건을 만족하면
true
를 반환합니다. - 조건을 만족하는 요소가 하나도 없으면
false
를 반환합니다.
구현 설명
some()
함수는 배열을 순회합니다.
콜백 함수를 인자로 받아 각 요소에 대해 평가하고, 그 결과를 바탕으로 true
또는 false
를 반환합니다.
- 하나의 요소라도 조건을 만족하면
true
를 반환합니다. - 즉, 배열의 어떤 요소라도 콜백 함수에서
true
를 반환하면some()
함수 자체도true
를 반환합니다. true
를 반환하는 요소를 찾는다면 더 이상 요소를 검사하지 않고, 배열 순회를 멈춥니다.
활용 예제
some()
함수는 배열에 특정 조건을 만족하는 요소가 하나라도 있는지 확인할 때 매우 유용합니다.
아래에 구체적인 상황을 몇 가지 예로 들어 설명하겠습니다.
사용자 권한 확인
여러 사용자가 있는 시스템에서, 특정 권한을 가진 사용자가 있는지 확인할 수 있습니다.
다음은 사용자가 'admin' 권한을 가지고 있는지 확인하는 경우의 예제입니다.
const users = [
{id: "alice", role: "user"},
{id: "bob", role: "editor"},
{id: "charlie", role:"admin"}
];
const hasAdmin = users.some(user => user.role === "admin");
console.log(hasAdmin); // true (Charlie가 admin이므로 true)
시리얼 넘버 정품 확인하기
시리얼 넘버를 확인하는 예제는 실제 애플리케이션에서 흔히 볼 수 있는 유용한 예제입니다. 다음은 시리얼 넘버가 정품인지 확인하는 예제입니다. 이 예제는 특정 제품의 시리얼 넘버가 정품 목록에 있는지 확인하는 데 초점을 맞추고 있습니다.
const validSerialNumbers = [
"SN12345678",
"SN23456789",
"SN34567890"
];
const product = {
id: 1,
serialNumber: "SN12345678"
};
/* 시리얼 넘버가 유효한지 판별하는 콜백 함수 */
function isValidSerialNumber(serialNumber) {
return validSerialNumbers.some(validSerial => validSerial === serialNumber);
}
/* 제품의 시리얼 넘버가 유효한지 확인 */
const isProductValid = isValidSerialNumber(product.serialNumber);
console.log(isProductValid); // true (제품의 시리얼 넘버가 유효함)
some()
함수의 장점과 단점
some()
함수는 배열의 요소 중 하나라도 주어진 조건을 만족하는지 간편하게 확인할 수 있는 유용한 메서드입니다. 하지만 단점 또한 존재합니다.
장점
some()
함수는 배열의 요소 중 조건을 만족하는지 확인하는 과정을 간결하게 표현할 수 있습니다. 또한, 조건을 만족하는 요소를 찾으면 즉시 true
를 반환하며, 배열의 나머지 요소를 추가로 검사하지 않습니다. 이는 성능 면에서 효율적입니다.
단점
false
를 유발하는 요소를 알 수 없습니다.
some()
함수는 조건을 만족하지 않는 요소들에 대한 정보를 제공하지 않습니다. 이는 조건을 만족하지 않는 요소에 대한 분석이 필요한 경우에는 한계가 될 수 있습니다.
단점 보완 방법
some()
함수의 단점을 보완하기 위해서는 다음과 같은 방법들을 고려할 수 있습니다.
조건을 만족하지 않는 요소 식별하기
filter()
함수는
배열의 요소를 순회하면서 콜백 함수를 사용하여 원하는 조건에 따라 필터링하는 함수입니다.
필터링된 배열을 반환합니다.
const numbers = [1, 2, 3, 4, 5];
/* 홀수가 아닌 요소를 필터링하는 콜백 함수 */
function isNotOdd(num) {
return num % 2 === 0;
}
/* 홀수가 아닌 모든 요소를 확인 */
const nonOddNumbers = numbers.filter(isNotOdd);
console.log(nonOddNumbers); // [2, 4]
조건을 만족하는 요소 찾기
const numbers = [1, 2, 3, 4, 5];
/* 짝수를 찾는 콜백 함수 */
function isEven(num) {
return num % 2 === 0;
}
/* 첫 번째 짝수를 찾기 */
const firstEvenNumber = numbers.find(isEven);
console.log(firstEvenNumber); // 2
모든 요소가 조건을 만족하는지 확인하기
명세서
명세서 사양 | |
---|---|
some()
|
ECMAScript Language Specification #sec-array.prototype.some |
브라우저 호환성
메서드 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
some()
|
1 | 12 | 1.5 | 3 |