MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Array.prototype.some()

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

구문

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

폴리필

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 2017 Draft (ECMA-262)
The definition of 'Array.prototype.some' in that specification.
Draft  

브라우저 호환성

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)

참조

문서 태그 및 공헌자

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