Biblioteka Lodash, jedna z bardziej popularnych bibliotek JavaScriptowych, zawierająca w sobie masę przydatnych funkcji. W tym artykule przybliżę wam 6 metod, które subiektywnie uważam za najbadziej przydatne. No to lecimy:
_.cloneDeep()
Mój faworyt, z którego korzystam najcześciej. Funkcja służącą do „głębokiego” klonowania obiektów z usunięciem powiązania między klonowanymi elementami. Tzn. jeśli użyjemy funkcji cloneDeep()
na obiekcie A a następnie w sklonowanym obiekcie B zmienimy wartość pola np. B.name = "Waldemar"
wtedy wartość pola zmieni się tylko w obiekcie B, w obiekcie A pozostanie niezmodyfikowana. Bez użycia tej metody, oba obiekty będą wskazywać na to samo miejsce w pamięci, dzięki czemu przy zmianie pola w jednym obiekcie, automatycznie zmieni się też wartość drugiego.
const obiektA = [{ 'a': 1 }, { 'b': 2 }];
const obiektB = _.cloneDeep(obiektA);
console.log(obiektA[0] === obiektB[0]);
// => false
_.find()
Funkcja find()
służy do wyszukiwania pierwszego elementu, który spełnia podany warunek. Tylko tyle i aż tyle. Możecie zapytać, no dobra, ale po co stosować dodatkową bibliotekę skoro metoda find()
występuję też w czystym JavaScripcie. Plusem tej od Lodasha jest możliwość wyszukiwania elementów w obiekcie.
Dostępne argumenty:
- Object lub tablica, w której będziemy wyszukiwać.
- Funkcja wywoływana podczas iteracji, tutaj umieszczamy nasz warunek.
- Indeks, od którego chcemy zacząć poszukiwania (argument opcjonalny).
Przykład:
import _ from 'lodash';
const users = [
{ user: 'barney', age: 36, active: false },
{ user: 'fred', age: 40, active: false },
{ user: 'jim', age: 22, active: true },
];
const myUser = _.find(users, obj => obj.active === true);
console.log(myUser.user);
// myUser.user => "jim"
_.filter()
Funkcja filter()
jest bardzo podobna w działaniu do wyżej omawianej find()
, różnica polega na tym, że funkcja filter()
zwraca tablicę z elementami, które spełniają podany warunek.
Dostępne argumenty:
- Object lub tablica, w której będziemy wyszukiwać.
- Funkcja wywoływana podczas iteracji, tutaj umieszczamy nas warunek.
Przykład:
import _ from 'lodash';
const users = [
{ user: 'barney', age: 36, active: false },
{ user: 'fred', age: 40, active: false },
{ user: 'jim', age: 22, active: true },
];
const myUsers = _.find(users, obj => obj.active === false);
myUsers.forEach((user) => {
console.log(user.user);
})
// user.user => "barney", "fred"
_.get()
Metoda get()
z działania przypomina trochę opisywaną funkcję find()
, z taką różnicą, że tutaj wyszukujemy po ścieżce a nie po warunku.
Dostępne argumenty:
- Object lub tablica, w której będziemy wyszukiwać.
- Ścieżka do poszukiwanego elementu.
- Zwracana wartość jeśli nie uda znaleźć się elementu po wskazanej scieżce (argument opcjonalny).
const foodObj = {
favFoods: [
"Pizza",
"Schabowy",
"Placki",
{ favOption: "Placek po węgiersku" },
],
};
const myFavFood = _.get(foodObj, 'favFoods[3].favOption', 'Nic ciekawego nie znaleziono')
console.log(myFavCandy)
// myFavFood => "Placek po węgiersku"
_.set()
Funkcja set()
służy do ustawiania danej wartości z wykorzystaniem wskazanej ścieżki.
Dostępne argumenty:
- Obiekt lub tablica, gdzie wartość będziemy ustawiać.
- Ścieżka do elementu.
- Pożądana wartość.
const foodObj = {
favFoods: [
"Pizza",
"Schabowy",
"Placki",
{ favOption: "Placek po węgiersku" },
],
};
_.set(foodObj, 'favFoods[3].favOption', 'naleśniki z serem')
console.log(foodObj.favFoods[3].favOption)
// => "naleśniki z serem"
_.map()
Funkcja map()
wykonuje podaną w argumencie funkcję na każdym elemencie obiektu lub tablicy a następnie zwraca nową funkcję z tymi elementami. Lekko zawiłe więc spójrzmy na przykład.
Dostępne argumenty:
- Obiekt lub tablica po której będziemy iterować.
- Funkcja, która zostanie wykonana przy każdej iteracji.
const studentList = [
{ name: "Michal", grade: 5 },
{ name: "Ola", grade: 4 },
{ name: "Wiktor", grade: 2 },
{ name: "Sebastian", grade: 3 },
{ name: "Agnieszka", grade: 3 },
{ name: "Filip", grade: 5 },
];
const studentNames = _.map(studentList, (student) => student.name);
console.log(studentNames);
// => ["Michal", "Ola", "Wiktor", "Sebastian", "Agnieszka", "Filip"];
Wymienione wyżej funkcje to tylko część z bogatej biblioteki Lodash, wszystkie metody wraz z opisami dostępne są tutaj.