Słowo „redukuj” dosłownie oznacza „zrobić coś mniejszego”. Jest to funkcjonalna koncepcja programowania, która stosuje funkcję przeciwko akumulatorowi i każdemu elementowi w tablicy, aby zredukować ją do pojedynczej wartości. Jest to bardzo potężna koncepcja i jest używana w tworzeniu skomplikowanych bibliotek i frameworków, takich jak Redux czy Ramda .
W JavaScript reduce jest dostępna jako metoda tablicowa. Metodę reduce stosuję w swojej pracy od dłuższego czasu. Zauważyłem jednak, że wielu moich przyjaciół i współpracowników ma trudności ze zrozumieniem i skutecznym stosowaniem tej metody. Dlatego zdecydowałem się napisać ten artykuł, aby wyjaśnić metodę redukcji w prostszy sposób. Ta potężna koncepcja może pomóc zoptymalizować kod i wdrożyć złożone systemy i logikę. Mamy nadzieję, że pomoże to większej liczbie osób właściwie to zrozumieć.
Zapomnijmy reducena razie o metodzie Array. Stworzymy własną reducefunkcję od podstaw, aby lepiej zrozumieć, co ona właściwie robi.
Aby rozpocząć, podzielmy różne komponenty w funkcji redukującej .
Będę używać TypeScript do budowania funkcji w tym artykule. Pozwoli mi to na użycie typów statycznych do lepszego zdefiniowania funkcji i ułatwi czytelnikom lepsze zrozumienie.
type Reducer<TEle, TAcc> = (acc: TAcc, ele: TEle) => TAcc;
function reduce<TEle, TAcc>(
arr: TEle[],
reducer: Reducer<TEle, TAcc>,
initialValue: TAcc
) {
// TODO: Implement
}
Rozważ prosty przykład redukcji — „Suma elementów w tablicy” . Zaimplementowanie tej logiki powinno być dość łatwe. Zróbmy to:
const arr = [1,2,3,4,5,6,7,8,9,10];
let sum = 0;
for (let num of arr) {
sum = sum + num;
}
console.log(sum);
Możemy teraz łatwo przepisać ten sam kod jako kombinację różnych komponentów reduce.
const arr = [1,2,3,4,5,6,7,8,9,10];
const initialValue = 0;
const reducer = (acc: number, ele: number) => acc + ele;
let acc = 0;
for (let ele of arr) {
acc = reducer(acc, ele);
}
Teraz możemy wykorzystać powyższe informacje do wykonania naszej reducefunkcji.
type Reducer<TEle, TAcc> = (acc: TAcc, ele: TEle) => TAcc;
function reduce<TEle, TAcc>(
arr: TEle[],
reducer: Reducer<TEle, TAcc>,
initialValue: TAcc
) {
let acc = initialValue;
for (let ele of arr) {
acc = reducer(acc, ele);
}
return acc;
}
Parametr reducer w metodzie reduce również przyjmuje indeks i tablicę wejściową jako argumenty, ale w istocie jest zaimplementowany w taki sam sposób, jak funkcja reduce , którą właśnie zbudowaliśmy.
Teraz jest coś, co możesz zrobić więcej, aby być naprawdę dobrym w używaniu redukcji, to ćwiczyć i próbować wdrażać złożone logiki redukcji. Niektóre z pozycji, które możesz wypróbować, to:
valuewłaściwością liczbową i zwraca sumę wszystkich valuewłaściwości.valuewłaściwością liczbową i zwraca średnią ze wszystkich valuewłaściwości.namewłaściwością i zwraca pojedynczy ciąg, który łączy wszystkie namewłaściwości oddzielone przecinkami.
Kiedy wysyłasz żądanie do facebook.com, Twój komputer wyszukuje nazwę domeny, aby przetłumaczyć tę nazwę domeny na adres IP, aby komputer mógł nawiązać to połączenie.
Nasz język jest potężnym narzędziem, które może kształtować nasze myśli, postawy i działania. Nawet pozornie nieszkodliwe terminy mogą utrwalać szkodliwe uprzedzenia i stereotypy.
Aby uniknąć niejasności, zostaną użyte następujące terminy; uwierzytelniający; Telefon komórkowy używany do tworzenia Witryny logowania; Witryna internetowa lub aplikacja, z której korzysta użytkownik, aby dokonać żądania logowania do Usługi; Sprzedawca świadczący daną usługę np
To, co stare, jest teraz znowu nowe, a to, co kiedyś było lśniącą, błyszczącą rzeczą, teraz wydaje się nudne. Nie mówię o dżinsach JNCO, które powróciły wśród fajnych dzieciaków w śródmieściu wraz z innymi modami późnych lat 90.
W 2022 roku, wraz z wydaniem GPT-3, umiejętność pisania wydaje się tracić na znaczeniu. Dzięki sztucznej inteligencji osoby o słabym pisaniu mogą również generować wysokiej jakości personel.
Uderzyło mnie to nagle, jak to często bywa. Znowu jest w połowie <Nie, nie ten w Pacyfiku, bordowy, ten na karnawale> Każdy nagłówek jest głośny…..