위 함수는 이전 살펴보았던 _.every와 달리 조건 내 한가지라도 true로 반환할 수 있다면, true를 반환하는 함수이다.
_.some(list, [predicate], [context])
모든 항목이 false를 반환하면, ".some"은 false를 반환합니다. 그러나 컬렉션의 모든 것이 false를 반환하지 않으면(적어도 하나의 true가 있기 때문이 ".some"은 true를 반환한다.)
.some 함수를 .every함수를 이용해 구현하기 위해선
_.every 함수의 논리를 뒤집으며 간단하게 구현할 수 있다.
_.every(list, ![predicate], [context])
//!_.every(list, ![predicate], [context])
_.some = !_.every(list, ![predicate], [context])
위 함수를 구현하는 _.every 함수 로직은 아래와 같다.
//every
function every(collection, predicate) {
// 조건으로 요구되는 함수 테스트를 통과하지 못한 항목이 있으면
//every 함수가 false를 리턴한다.
for(let i = 0; i < collection.length; i++) {
if(predicate(collection[i]) === false) {
return false;
}
}
// 컬렉션의 모든 항목이 true인지 테스트 한 후
// every 함수는 true를 반환한다.
return true
}
// 항목 입력이 짝수인지 테스트하는 함수 isEven 생성
function isEven (item) {
// modulo (%)는 두 수를 나눈 나머지를 찾습니다
if (item % 2 === 0 ) {
return true ;
}
false 반환 ;
}
every ([ 2 , 4 ], isEven); // true를 반환합니다.
every ([ 1 , 2 , 3 ], isEven); // 거짓 반환
function _.some(collection, predicate) {
return ! every(collecrion, function(item) {
return !(predicate(item));
})
}
https://tingdeng.wordpress.com/2015/08/10/implementation-of-_-some-and-_-every/