2017-02-15 3 views
1

로다시 방법 _.some을 사용하고 있습니다.'_.some'을 사용하여 각 항목의 함수를 호출하는 속기.

술어의 경우 현재 항목에 대해 메소드를 호출하고 값을 리턴합니다.

return _.some(items, function(item) { 
    return item.hasChanges(); 
}); 

예상대로 작동합니다.

그러나이 작업을 수행하는 약식 방법이 있는지 궁금합니다. hasChanges이 속성했다

, 내가 할 수있는 :

return _.some(items, "hasChanges"); 

내가 통해 메소드를 호출하려고 :

return _.some(items, _.invoke(_.identity, "hasChanges")); 

그러나 예상대로 작동하지 않았다.

답변

1

정말로 Lodash 방식으로 가고 싶다면 과 _.result 또는 _.invoke을 사용하여 사용자 정의 술어와 동등한 효과를 얻을 수 있습니다.

_.some(users, _.partial(_.invoke, _, 'hasChanges')); 

술어

한 번 만들어 나중에 사용할 수 :

var predicate = _.partial(_.invoke, _, 'hasChanges'); 
// later... 
// a function which only checks, without creating a 
// new anonymous function each time. 
function check() { 
    return _.some(users, predicate); 
} 

ES6를 배열의 some 기능과 화살표 기능을 사용.

items.some(item => item.hasChanged()); 

_.some (또는 대부분의 기능 구현 some)이 상기 제 truthy 발생시에 루프를 휴식. _.invokeMap과 같은 함수는 결과가 인지 여부와 상관없이 모든 객체에서 함수를 호출합니다.이 함수는 이미을 갖는 사용자 정의 조건 자보다 효율적입니다.

Lodash offers shorthand syntax for common predicates 그러나 개체의 함수를 호출하지 않습니다.

// The `_.matches` iteratee shorthand. 
_.some(users, { 'user': 'barney', 'active': false }); 
// => false 

// The `_.matchesProperty` iteratee shorthand. 
_.some(users, ['active', false]); 
// => true 

// The `_.property` iteratee shorthand. 
_.some(users, 'active'); 
// => true 

다음은 작동하지 않습니다

_.invoke(_.identity, "hasChanges") 

_.identity.hasChanges() 유사합니다.

+1

멋진 정보! ES6 구문은 가장 간결한 방법 인 것처럼 보입니다. 일반 _.invoke가 작동하지 않는 이유를 삭제 해 주셔서 감사 드리며 _.identity와 자리 표시 자 _가 완전히 다릅니다. – user715374