요약

some() 메소드는 배열 내 일부 요소가 제공된 함수에 의해 구현된 테스트를 통과하는지를 테스트합니다.

문법(Syntax)

arr.some(callback[, thisArg])

매개변수

callback
각 요소에 대해 테스트할 함수, 인수 셋을 취하는:
currentValue
배열 내 현재 처리 중인 요소.
index
배열 내 현재 처리 중인 요소의 인덱스.
array
some()이 호출한 배열.
thisArg
선택 사항. callback을 실행할 때 this로 사용하는 값.

반환 값

콜백 함수가 배열 요소에 대해 참인(truthy) 값을 반환하는 경우 true를 반환합니다; 그렇지 않으면, false.

설명

some()callbacktruthy 값(Boolean으로 변환했을 때 true가 되는 값)을 반환하는 요소를 찾을 때까지 배열에 있는 각 요소에 대해 한 번 callback 함수를 실행합니다. 그런 요소가 발견된 경우, some()은 즉시 true를 반환합니다. 그렇지 않으면, some()false를 반환합니다. callback은 할당한 값이 있는 배열의 인덱스에 대해서만 호출됩니다; 삭제됐거나 값이 할당된 적이 없는 인덱스에 대해서는 호출되지 않습니다.

callback은 세 인수(요소값, 그 요소 인덱스 및 순회되는 Array 객체)와 함께 호출됩니다.

thisArg 매개변수가 some()에 제공된 경우, 호출될 때 callback에 전달됩니다, this 값으로 쓰기 위해. 그렇지 않으면, undefined값이 this 값으로 쓰기 위해 전달됩니다. 결국 callback에 의해 관찰할 수 있는 this 값은 함수에 의해 보이는 this를 결정하는 평소 규칙에 따라 결정됩니다.

some()은 호출된 배열을 변화시키지(mutate) 않습니다.

some()에 의해 처리되는 요소의 범위는 callback의 첫 호출 전에 설정됩니다. some() 호출 시작 이후로 배열에 추가된 요소는 callback에 의해 방문되지 않습니다. 배열의 기존, 미방문 요소가 callback에 의해 변경된 경우, 방문하는 callback에 전달된 그 값은 some()이 그 요소의 인덱스를 방문한 시점에 값이 됩니다; 삭제된 요소는 방문되지 않습니다.

예시

배열 요소값 테스트

다음 예는 배열 내 요소 중 하나라도 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(elem => elem > 10);  // false
[12, 5, 8, 1, 4].some(elem => elem > 10); // true

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

다음 예는 요소가 배열 내 존재하는 경우 true를 반환합니다:

var fruits = ['apple', 'banana', 'mango', 'guava'];

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

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

화살표 함수를 사용하여 값이 존재하는지 확인

var fruits = ['apple', 'banana', 'mango', 'guava'];

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

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

모든 값을 Boolean으로 변환

var TRUTHY_VALUES = [true, 'true', 1];

function getBoolean(a) {
    'use strict';

    var value = a;

    if (typeof value === 'string') {
        value = value.toLowerCase().trim();
    }

    return TRUTHY_VALUES.some(function(t) {
        return t === value;
    });
}


getBoolean(false); // false
getBoolean('false'); // false
getBoolean(1); // true
getBoolean('true'); // true

폴리필(Polyfill)

some()은 ECMA-262 표준 제5판에 추가되었습니다; 그러하기에 모든 표준 구현에 없을 수 있습니다. 스크립트 시작 부분에 다음 코드를 삽입하여 이를 우회할 수 있습니다, 원래 이를 지원하지 않는 구현에서 some()을 사용케 하는. 이 알고리즘은 바로 ECMA-262 제5판에서 서술한 겁니다, ObjectTypeError가 원래값을 갖고 fun.callFunction.prototype.call()의 원래값으로 평가하는 것으로 여기는.

// ECMA-262 5판, 15.4.4.17항의 작성 과정
// 참고: http://es5.github.io/#x15.4.4.17
if (!Array.prototype.some) {
  Array.prototype.some = function(fun/*, thisArg*/) {
    'use strict';

    if (this == null) {
      throw new TypeError('Array.prototype.some called on null or undefined');
    }

    if (typeof fun !== 'function') {
      throw new TypeError();
    }

    var t = Object(this);
    var len = t.length >>> 0;

    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++) {
      if (i in t && fun.call(thisArg, t[i], i, t)) {
        return true;
      }
    }

    return false;
  };
}

명세

명세 상태 설명
ECMAScript 5.1 (ECMA-262)
The definition of 'Array.prototype.some' in that specification.
Standard 초기 정의. JavaScript 1.6에서 구현됨.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.some' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Array.prototype.some' in that specification.
Draft  

브라우저 호환성

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) 1.5 (1.8) 9 (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) 1.0 (1.8) (Yes) (Yes) (Yes)

같이 보기

문서 태그 및 공헌자

이 페이지의 공헌자: KisukPark, kyunooh, Netaras
최종 변경: KisukPark,