some() 메소드는 배열 내 일부 요소가 제공된 함수에 의해 구현된 테스트를 통과하는지를 테스트합니다.
구문
arr.some(callback[, thisArg])
매개변수
callback- 각 요소에 대해 테스트할 함수, 인수 셋을 취하는:
currentValue- 배열 내 현재 처리 중인 요소.
index- 배열 내 현재 처리 중인 요소의 인덱스.
arraysome()이 호출한 배열.
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항의 작성 과정
// 참고: 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;
};
}
스펙
브라우저 호환성
| 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) |