Array.prototype.some()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
some()
메서드는 배열 안의 어떤 요소라도 주어진 판별 함수를 적어도 하나라도 통과하는지 테스트합니다. 만약 배열에서 주어진 함수가 true을 반환하면 true를 반환합니다. 그렇지 않으면 false를 반환합니다. 이 메서드는 배열을 변경하지 않습니다.
시도해보기
구문
// 화살표 함수
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
메서드는 반복 메서드입니다. 이 메서드는 주어진 callbackFn
함수가 참 같은 값을 반환할 때까지 배열 안에 있는 각각의 요소마다 한 번씩 호출합니다. 만약 그러한 요소를 찾았으면 some()
메서드는 그 즉시 true
를 반환하며 배열 순회를 멈춥니다. 그렇지 않고 callbackFn
이 모든 요소에 대해 거짓같은 값을 반환하면 some()
은 false
를 반환합니다.
some()
은 수학에서 존재 한정자와 같은 역할을 합니다. 특히 빈 배열의 경우 모든 조건에 대해 false
를 반환합니다.
callbackFn
는 값이 할당된 배열 인덱스에서만 실행됩니다. 희소 배열의 빈 슬롯에서는 실행되지 않습니다.
some()
은 호출된 배열의 값을 변경하지 않지만, 제공된 callbackFn
에서는 가능합니다. 그럼에도 배열의 길이는 callbackFn
의 첫 실행 이전에 저정된다는 점을 명심하시기 바랍니다.
callbackFn
은some()
호출되어 시작할 당시 배열의 초기 길이를 넘어서는 요소는 방문하지 않습니다.- 이미 방문했던 인덱스를 변경해도
callbackFn
은 해당 인덱스에 대해callbackFn
을 다시 실행하지 않습니다 - 만약 존재하나 아직 방문하지 않은 배열의 요소는
callbackFn
이 변경시킬 수 있습니다. 이 값은callbackFn
이 요소에 방문하는 시점에callbackFn
에 넘겨지는 값입니다. 삭제한 요소는 방문하지 않습니다.
some()
메서드는 제너릭입니다. this
값에 length
속성과 정수 키 속성만 있으면 됩니다.
예제
배열의 요소 테스트
다음 예제는 배열 내 요소 중 하나라도 10보다 큰지 판별합니다.
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
화살표 함수를 사용한 배열의 요소 테스트
화살표 함수는 같은 테스트에 대해 더 짧은 구문을 제공합니다.
[2, 5, 8, 1, 4].some((x) => x > 10); // false
[12, 5, 8, 1, 4].some((x) => x > 10); // true
값이 배열 내 존재하는지 확인
includes()
메서드의 기능을 모방하기 위해 이 사용자 지정 함수는 요소가 배열에 있는 경우 true
반환합니다.
const fruits = ["apple", "banana", "mango", "guava"];
function checkAvailability(arr, val) {
return arr.some((arrVal) => val === arrVal);
}
checkAvailability(fruits, "kela"); // false
checkAvailability(fruits, "banana"); // true
어떠한 값이건 불리언으로 변환
const TRUTHY_VALUES = [true, "true", 1];
function getBoolean(value) {
if (typeof value === "string") {
value = value.toLowerCase().trim();
}
return TRUTHY_VALUES.some((t) => t === value);
}
getBoolean(false); // false
getBoolean("false"); // false
getBoolean(1); // true
getBoolean("true"); // true
희소 배열에 some() 사용하기
some()
은 빈 슬롯에 조건자를 실행하지 않습니다.
console.log([1, , 3].some((x) => x === undefined)); // false
console.log([1, , 1].some((x) => x !== 1)); // false
console.log([1, undefined, 1].some((x) => x !== 1)); // true
배열이 아닌 객체에 some() 호출하기
some()
메서드는 this
의 length
속성을 읽고 객체의 마지막에 도달하거나 callbackFn
이 true
를 반환할 때 까지 정수 인덱스로 접근합니다.
const arrayLike = {
length: 3,
0: "a",
1: "b",
2: "c",
};
console.log(Array.prototype.some.call(arrayLike, (x) => typeof x === "number"));
// false
명세
Specification |
---|
ECMAScript Language Specification # sec-array.prototype.some |
브라우저 호환성
BCD tables only load in the browser