2017-12-12 22 views
5

lodash filter 설명서를 살펴본 결과 세 번째 매개 변수가 문맥인지 여부가 명확하지 않습니다.lodash의 필터 함수는 컨텍스트를 취합니까?

나는 cytoscape 플러그인 (dagre)을 사용하고 있는데, 이는 3 인수로 this을 전달하는 것으로 보입니다. 필터 메서드가 호출되기 전에 실행을 일시 중지하면 this이 정의됩니다. 그러나 전화 this은 정의되지 않았습니다.

underscore filter 설명서를 살펴본 결과 문맥으로 세 번째 인수가있는 것으로 보입니다. 그래서 나는 원래 언더 코어를 사용한 플러그인이 아마도 로다시 (lodash)로 변경되었다고 추측합니다. 내가 작업하고있는 프로젝트는 lodash를 사용하고 있습니다.

내 생각에 this이 null 인 이유를 이해할 수 없습니다. 그것은 프로젝트 특정 수 있지만 난 그냥 lodash의 필터의 세 번째 매개 변수에 대한 명확하고 싶습니다.

lodash의 필터 정의가 밑줄의 필터와 정확히 일치합니까? 그것은 문서에서 그렇게 보이지 않습니다.

+0

세 번째 매개 변수는 lodash'filter' 메서드에 세 번째 매개 변수가 없습니다. –

+0

@chsdk 예 ... 나는 밑줄을 로다 시로 바꿀 수 있다고 생각했을 것입니다. 그러나 밑줄은 세 번째 매개 변수를 취할 수 있지만 lodash는 그렇지 않습니다. – Touch

+2

Lodash 3'filter'는 세 번째 컨텍스트 매개 변수를 가지고 있습니다. Lodash 4에서 제거되었습니다. – Tushar

답변

2

불행하게도 lodash filter methodunderscore filter method 달리하는 context 인수에 대한 옵션을 제공하지 않습니다

인수를

  • colle ction (Array | Object) : 반복 할 컬렉션입니다.
  • [predicate = _. identity] (함수) : 반복마다 호출되는 함수입니다. 당신이 할 수있는 일

은 다음과 같이 원하는 context 객체에 콜백 함수를 바인딩 할 .bind() method을 사용하는 것입니다

_.filter(array, callback.bind(context)); 

참고 : 자바 스크립트가 가지고있는

주 자신의 Array#filter() method 이미이 옵션을 제공합니다.

3

그럼 언제든지 Function.prototype.bind을 사용하여 자신의 컨텍스트를 정의 할 수 있습니다. 그것은 단지 두 개의 인수 걸립니다

_.filter([…], 
    function (o) { 
    console.log(this.id); //100 
    //than return something based on o 
    return o.active 
    }.bind({id: 100}) 
); 

Doc on mdn

+0

당신도 대답하실 수 있습니다. 위로 뽑혔다. lodash의 필터 방법이 밑줄의 필터 방법과 다르다는 사실을 이야기하기 때문에 다른 것을 선택했습니다. 그러나 대답에 감사드립니다. 고맙습니다 :-) – Touch