2017-12-12 191 views
5

Zapoznałem się z dokumentacją lodash filter i nie jest jasne, czy trzeci parametr jest kontekstem.Czy funkcja filtrowania lodash ma kontekst?

Używam wtyczki cytoscape (dagre) i wydaje mi się, że jako argument 3 przechodzi się pod this. Kiedy wstrzymuję wykonywanie przed wywołaniem metody filtru, zdefiniowano this. Ale w ramach połączenia this jest niezdefiniowana.

Zerknąłem na dokumentację underscore filter i wydaje się, że jako trzeci kontekst przyjmuję trzeci argument. Tak więc domyślam się, że wtyczka pierwotnie zastosowała podkreślenie, a następnie może zostać zmieniona na lodash. Projekt, nad którym pracuję, korzysta z lodasha.

Nie mogę zrozumieć, dlaczego this ma wartość null w tym punkcie w mojej puszce. Mogłoby to być specyficzne dla projektu, ale chcę tylko wyjaśnić trzeci parametr filtru Lodasha.

Czy definicja filtra lodash jest dokładnie taka sama jak filtr podkreślenia? Z dokumentacji tego nie wynika.

+0

Jaki trzeci parametr, nie ma trzeciego parametru w metodzie "filtru". –

+0

@chsdk Tak ... Myślałem, że możesz zastąpić podkreślenie lodażem. Ale podkreślenie może zająć trzeci parametr, podczas gdy nie ma miejsca. – Touch

+2

Lodash 3 'filter' ma trzeci parametr kontekstu. Jest usuwany w Lodash 4. – Tushar

Odpowiedz

2

Niestety lodash filter method, w przeciwieństwie underscore filter method, nie stanowią opcję dla context argumentu, ponieważ trwa tylko dwa argumenty:

Argumenty

  • colle ction (Array | Object): Zbiór do iteracji.
  • [predicate = _. Identity] (Function): Funkcja wywoływana dla iteracji.

Co możesz zrobić, to użyć .bind() method związać z funkcji oddzwaniania do żądanej context obiektu, na przykład:

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

Uwaga:

Zauważ, że JavaScript własny Array#filter() method który już zapewnia tę opcję.

3

Zawsze można zdefiniować własny kontekst za pomocą 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

Odpowiedź jest również do zaakceptowania. Głosowali na to. Wybierz drugą, ponieważ mówi o tym, że metoda filtrująca Lodasha różni się od tej w podkreśleniu. Ale dzięki za odpowiedź. Doceniam to :-) – Touch