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를 반환합니다. 이 메서드는 배열을 변경하지 않습니다.

시도해보기

구문

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

같이 보기