Biblioteka Lodash - metody, których nie rozumiem.

0

Cześć. Chciałbym się dowiedzieć, co nieco na temat paru metod z biblioteki Lodash. Powoli sobie ją przerabiam, ale jest kilka metod, których nie potrafię zrozumieć. Co do niektórych znalazłem jakieś materiały, ale nie są one dla mnie na tyle wystarczające, żebym mógł zrozumieć ich działanie. Ogólnie przepatrzyłem pierwsze strony w google i to co było na yt. No trudno, nie ogarniam na konkretnych przykładach.

/* Metoda _.difference z tego co udało mi się zaobserwować tworzy tablicę z elementami, których nie ma w drugiej tablicy. */
const array4A = ['Mateusz', 'Robert', 'Kamil'];
const array4B = ['Mateusz', 'Krzysztof', 'Jan'];
console.log(_.difference(array4A, array4B)); // [ 'Robert', 'Kamil' ]
/* Jak widać wszystko się zgadza, jeśli najpierw będzie tablica B, a potem A to wynik będzie Krzysztof oraz Jan. */
/* Mam lekki problem przy _.differenceBy, ale wydaje mi się, że też udało mi się zrozumieć działanie tej metody. Otóż działa podobnie do _.difference, ale wszystkie elementy przechodzą test w postaci zaimplementowanej funkcji, np. */
const array5A = [1, 2, 5, 6, 7];
const array5B = [1, 2, 6];
let iterator = value => {return value > 5 ? value: undefined};
console.log(_.differenceBy(array5A, array5B, iterator())); // [ 5, 7 ]
/* Nie wiem dlaczego jest 5 i 7, skoro w warunku jest > 5, a nie >= 5. Poza tym no to rozumiem to tak, że porównuje znowu obie tablice względem funkcji i siebie, następnie podaje wynik. Cyfry 5 i 7 są w pierwszej tablicy, ale nie ma ich w drugiej, dlatego taki dało wynik. Nie rozumiem natomiast poniższego zapisu, bo tutaj jest użyta funkcja strzałkowa, to ja rozpisać to inaczej gdybym chciał? */
let iterator = value => {return value > 5 ? value: undefined};

Ok, to teraz na metodę, której nie rozumiem najbardziej. Jest to _.differenceWith. Czyli znowu działa podobnie do _.difference, ale akceptuje
komparator, który jest wywoływany w celu porównania elementów tablicy z wartościami. Znalazłem taki przykład: https://bit.dev/lodash/lodash/difference-with, no i w sumie nie wiem. Niby trochę więcej niż w dokumentacji, ale na jakimś swoim przykładzie tego nie ogarniam chyba. Jeśli miałbym teraz powiedzieć co robi ta metoda, to powiedziałbym, że należy stworzyć tablicę obiektów, a następnie chcąc zastosować tą metodę to należy (przypisać do niej?) jeśli tak można poprawnie powiedzieć zmienną, która reprezentuje tą tablice obiektów, oraz po separatorze podać tablicę obiektów, która będzie porównana z wcześniejszą tablicą obiektów. Na końcu jest _.isEqual, co oznacza porównanie dwóch wartości w celu ustalenia, czy są one równoważne - czyli po prostu x:1 to x:1, itp? Rozpisałem sobie po swojemu.

const array6A = [{iloscJablek: 10, iloscGruszek: 25}, {iloscJablek: 25, iloscGruszek: 10}];
console.log(_.differenceWith(array6A, [{iloscJablek: 25, iloscGruszek: 10}], _.isEqual)); // [ { iloscJablek: 10, iloscGruszek: 25 } ]

Czyli pokazało mi pierwszy obiekt w tablicy, bo jego nie ma, a takie było kryterium porównania.

Nie będę w przyszłości tworzyć nowego tematu, po prostu ten będę aktualizować o inne metody z biblioteki Lodash, których nie zrozumiem do końca.

0
PanKrakers napisał(a):

Nie będę w przyszłości tworzyć nowego tematu, po prostu ten będę aktualizować o inne metody z biblioteki Lodash, których nie zrozumiem do końca.

Dla celów praktycznych nie ma sensu się uczyć wszystkich metod z Lodasha. Jak będziesz czegoś potrzebować, to znajdziesz sobie potrzebną metodę w dokumentacji. Chyba, że dla celów edukacyjnych - jeśli jesteś ogólnie ciekawy, jak to zrobili itp. to zawsze możesz sprawdzić źródła: https://github.com/lodash/lodash/blob/4ea8c2ec249be046a0f4ae32539d652194caf74f/differenceWith.js (tylko trochę po plikach będziesz musiał się nachodzić, żeby zobaczyć definicje innych funkcji - tutaj widać, że differenceWith importuje 4 różne pliki.

Tym niemniej fakt, że Lodash ma dość mało intuicyjne API. Dlatego go nie używam, bo szybciej napiszę własny kawałek kodu niż się wczytam, co która metoda robi. W ogóle polecam tę metodę - opanuj najpierw dobrze obiekty w JS (i działania na kluczach, właściwościach, Object.assign itp.), tablice (wraz z użyciem metod .map, .filter, .reduce i inne metody https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array , itp.), możesz też zahaczyć o zbiory i mapy z ES6, a potem będziesz mógł napisać sobie wszystko bez Lodasha. W necie masz też przykłady różnych tricków w czystym JS.

A co do Lodasha to szczerze mówiąc to najbardziej (jedyne?) przydatne metody z Lodasha to _.get, _.set, _.cloneDeep - tutaj jeszcze fajnie mieć gotową funkcję do tego. Ale jakieś takie manipulacje tablicami obiektów? Bardziej czytelnie to można zrobić w czystym JS (kiedyś tak nie było, bo kiedyś JS był uboższym językiem, dlatego kiedyś Lodash faktycznie był bardziej pomocny)

1 użytkowników online, w tym zalogowanych: 0, gości: 1