some()
메소드는 배열 내 일부 요소가 제공된 함수에 의해 구현된 테스트를 통과하는지를 테스트합니다.
구문
arr.some(callback[, thisArg])
매개변수
callback
- 각 요소에 대해 테스트할 함수, 인수 셋을 취하는:
currentValue
- 배열 내 현재 처리 중인 요소.
index
- 배열 내 현재 처리 중인 요소의 인덱스.
array
some()
이 호출한 배열.
thisArg
- 선택 사항.
callback
을 실행할 때this
로 사용하는 값.
반환값
콜백 함수가 배열 요소에 대해 참인(truthy) 값을 반환하는 경우 true
를 반환합니다; 그렇지 않으면, false
.
설명
some()
은 callback
이 truthy 값(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판에서 서술한 겁니다, Object
및 TypeError
가 원래값을 갖고 fun.call
은 Function.prototype.call()
의 원래값으로 평가하는 것으로 여기는.
// ECMA-262 5판, 15.4.4.17항의 작성 과정 // 참고: https://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; }; }
스펙
브라우저 호환성
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) |