Array.prototype.some()

some() 메서드는 배열 안의 어떤 요소라도 주어진 판별 함수를 적어도 하나라도 통과하는지 테스트합니다. 만약 배열에서 주어진 함수가 true을 반환하면 true를 반환합니다. 그렇지 않으면 false를 반환합니다. 이 메서드는 배열을 변경하지 않습니다.

시도해보기

구문

js

// 화살표 함수
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)

매개변수

  • callbackFn
    • : 배열의 각 요소에 대해 실행할 함수. 이 함수는 요소가 시험을 통과하면 참 같은 값을 반환하며, 그렇지 않으면 거짓인 값을 반환합니다.
    다음의 인자와 함께 함수를 호출합니다.
    element

    처리할 배열 내 현재 요소

    index

    처리할 현재 요소의 인덱스

    array

    some을 호출한 배열

  • thisArg Optional
    • : callbackFn을 실행할 때 this로 사용하는 값. 반복 메소드를 참고하세요.

반환 값

콜백 함수가 적어도 배열 중 하나의 요소에 대해 참인 값을 반환하면 true를 반환하며, 그렇지 않으면 false를 반환합니다.

설명

some 메서드는 반복 메서드입니다. 이 메서드는 주어진 callbackFn함수가 참 같은 값을 반환할 때까지 배열 안에 있는 각각의 요소마다 한 번씩 호출합니다. 만약 그러한 요소를 찾았으면 some() 메서드는 그 즉시 true를 반환하며 배열 순회를 멈춥니다. 그렇지 않고 callbackFn이 모든 요소에 대해 거짓같은 값을 반환하면 some()false를 반환합니다.

some()은 수학에서 존재 한정자와 같은 역할을 합니다. 특히 빈 배열의 경우 모든 조건에 대해 false를 반환합니다.

callbackFn는 값이 할당된 배열 인덱스에서만 실행됩니다. 희소 배열의 빈 슬롯에서는 실행되지 않습니다.

some()은 호출된 배열의 값을 변경하지 않지만, 제공된 callbackFn에서는 가능합니다. 그럼에도 배열의 길이는 callbackFn의 첫 실행 이전에 저정된다는 점을 명심하시기 바랍니다.

  • callbackFnsome() 호출되어 시작할 당시 배열의 초기 길이를 넘어서는 요소는 방문하지 않습니다.
  • 이미 방문했던 인덱스를 변경해도 callbackFn은 해당 인덱스에 대해 callbackFn을 다시 실행하지 않습니다
  • 만약 존재하나 아직 방문하지 않은 배열의 요소는 callbackFn이 변경시킬 수 있습니다. 이 값은 callbackFn이 요소에 방문하는 시점에 callbackFn에 넘겨지는 값입니다. 삭제한 요소는 방문하지 않습니다.

some() 메서드는 제너릭입니다. this 값에 length 속성과 정수 키 속성만 있으면 됩니다.

예제

배열의 요소 테스트

다음 예제는 배열 내 요소 중 하나라도 10보다 큰지 판별합니다.

js

function isBiggerThan10(element, index, array) {
  return element > 10;
}

[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true

화살표 함수를 사용한 배열의 요소 테스트

화살표 함수는 같은 테스트에 대해 더 짧은 구문을 제공합니다.

js

[2, 5, 8, 1, 4].some((x) => x > 10); // false
[12, 5, 8, 1, 4].some((x) => x > 10); // true

값이 배열 내 존재하는지 확인

includes() 메서드의 기능을 모방하기 위해 이 사용자 지정 함수는 요소가 배열에 있는 경우 true 반환합니다.

js

const fruits = ["apple", "banana", "mango", "guava"];

function checkAvailability(arr, val) {
  return arr.some((arrVal) => val === arrVal);
}

checkAvailability(fruits, "kela"); // false
checkAvailability(fruits, "banana"); // true

어떠한 값이건 불리언으로 변환

js

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()은 빈 슬롯에 조건자를 실행하지 않습니다.

js

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() 메서드는 thislength 속성을 읽고 객체의 마지막에 도달하거나 callbackFntrue를 반환할 때 까지 정수 인덱스로 접근합니다.

js

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

같이 보기