Professional Documents
Culture Documents
Jeśli musimy wybrać spośród dużej grupy wartości, instrukcja switch będzie działać znacznie szybciej niż
równoważna logika if-else.
Switch jest cztelniejszy i bardziej przejrzysty, gdy trzeba łączyć przypadki. If jest również bardziej podatny na
błędy.
function gradeCalculator(score) {
let x = "c";
switch(x.toLowerCase()) {
case "a" :
console.log('Monday');
break;
case "b":
console.log('Tuesday');
break;
default:
console.log('Weekend!');
}
function getTranslateMap(x) {
const obj = {
"a": "Monday",
"b": "Tuesday",
"c": "Wednesday",
"d": "Thursday",
"e": "Friday"
}
return obj[x.toLowerCase()] ?? "x not found"
}
getTranslateMap("c");
Pętle i różnice pomiędzy nimi
Pętla for: Pętla for jest najbardziej klasycznym typem pętli w JavaScript. Pozwala na wykonanie określonej liczby
powtórzeń.
Fibonacci sequence
let input = 7;
let firstTerm = 0;
let secondTerm = 1;
Find primes
function findPrimes(n) {
let primeNumbers = [];
for(let i = 2; i <= n; i++) {
let isPrime = true; // Assume i is prime until proven otherwise
for(let j = 2; j < i; j++) {
if(i % j === 0) {
isPrime = false;
break;
}
}
if (isPrime) {
primeNumbers.push(i);
}
}
return primeNumbers;
}
Pętla while: Pętla while wykonuje się dopóki podany warunek jest prawdziwy.
*****
let printedTimes = 0;
***
let i = 3;
while (i <= 10) {
console.log(i);
i += 3;
}
****
Sum 5 + 4 + 3 + 2 + 1
let sum = 0;
let i = 1;
while (i <= 5) {
sum += i;
i++;
}
console.log(sum);
Pętla do...while: Pętla do...while również wykonuje się dopóki warunek jest prawdziwy, ale jest sprawdzany po
zakończeniu każdej iteracji. To oznacza, że kod wewnątrz pętli będzie wykonany co najmniej raz.
Pętla for...of: Pętla for...of służy do iteracji po elementach obiektów iterowalnych, takich jak układy (array), łańcuchy
(strings), mapy (maps), zbiory (sets) itp.
function findMaxValue(arr) {
Pętla for...in: Pętla for...in jest używana do iteracji po właściwościach obiektów (properties of objects). Działa na
wszystkich właściwościach wyliczalnych obiektu, włącznie z właściwościami odziedziczonymi z prototypu.
for (const klucz in obiekt) { // kod do wykonania dla każdej właściwości }
Map() tworzy nową tablicę (array) poprzez wywołanie funkcji dla każdego elementu tablicy, nie wykonuje funkcji dla
pustych elementów, nie zmienia oryginalnej tablicy.
console.log(sweeterArray)
Rekurencja
Technika rozwiązywania problemu poprzez rozwiązywanie mniejszych problemów tego samego typu. Możemy
uprościć definicję mówiąc, że rekurencja jest funkcją, która wywołuje samą siebie bezpośrednio lub pośrednio.
Wszystkie problemy, które możemy rozwiązać w rekurencji, możemy również rozwiązać w zwykłych pętlach
iteracyjnych. Lecz 1. kod rekurencyjny jest prostszy i krótszy niż kod iteracyjny. Funkcja rekurencyjna będzie napisana
w mniejszej ilości linii kodu i będzie łatwiejsza do debugowania. 2. Dzięki rekurencji możemy wykorzystać istniejący
stos wywołań zamiast tworzyć stos samodzielnie. Co oznacza, że możemy używać rekurencji zawsze, gdy chcemy
użyć stosu. Dwoma dobrymi przykładami implementacji rekurencji w strukturach danych są drzewa i grafy.
Twój program nie powinien mieć dużych liczb i zbyt wielu iteracji. Funckje rekurencyjne używają stosu wywołań, a
stos wywołań ma limit.
function fibonacci(n) {
if (n < 2){
return n;
}
return fibonacci(n - 2) + fibonacci(n - 1);
}
console.log(fibonacci(7)); //13
function countDown(fromNumber) {
if (fromNumber < 1) {
return;
}
console.log(fromNumber);
countDown(fromNumber-1);
}
countDown(3);
function sum(n) {
if (n <= 1) {
return n;
}
return n + sum(n - 1);
}
console.log(sum(5));
Factorial
function factorial(n) {
if (n <= 1) {
return n
}
return factorial(n-1) * n
}
factorial(5) //120
Sortowanie
Sortowanie to proces układania kolekcji elementów w określonej kolejności. Elementy te mogą być liczbami, ciągami
znaków, obiektami lub dowolnym innym typem danych, które można porównać. Celem sortowania jest
uporządkowanie elementów w sposób, który ułatwia wyszukiwanie określonych wartości, wykonywanie wydajnych
wyszukiwań lub prezentowanie danych w bardziej znaczący sposób.
Kolejność sortowania elementów może się różnić w zależności od konkretnych wymagań i rodzaju sortowanych
danych. Typowe porządki sortowania obejmują
Sortowanie to podstawowa operacja, która może znacząco wpłynąć na wydajność i efektywność algorytmów i
przetwarzania danych. Wydajne algorytmy sortowania mają kluczowe znaczenie dla zadań takich jak przeszukiwanie
dużych zbiorów danych, znajdowanie najwyższych lub najniższych wartości oraz organizowanie danych do
prezentacji lub analizy.
Array.prototype.sort(): Jest to wbudowana metoda do sortowania tablic w języku JavaScript. Sortuje elementy,
konwertując je na ciągi znaków i porównując ich sekwencje jednostek kodowych UTF-16.
const numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5];
numbers.sort((a, b) => a - b);
Sortowanie bąbelkowe (Bubble Sort): To prosta metoda sortowania, która wielokrotnie przechodzi przez listę,
porównuje sąsiadujące elementy i zamienia je miejscami, jeśli są w niewłaściwej kolejności.
https://www.youtube.com/watch?v=8-Yy1JWScsU&ab_channel=getMaxed
Sortowanie przez wstawianie (Insertion Sort): Ta metoda tworzy posortowaną tablicę poprzez dodawanie kolejnych
elementów. Jest znacznie mniej wydajna dla dużych list w porównaniu do bardziej zaawansowanych algorytmów,
takich jak quicksort, heapsort czy sortowanie przez scalanie.
function insertionSort(arr) {
const n = arr.length;
for (let i = 1; i < n; i++) {
let current = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = current;
}
}
Sortowanie szybkie (Quick Sort): To efektywny algorytm sortowania przez podział i panowanie, który polega na
wyborze elementu "osiowego" (pivot) z tablicy i podziale pozostałych elementów na dwie podtablice w zależności od
tego, czy są mniejsze czy większe od osiowego.
function quickSort(arr) {
if (arr.length <= 1) return arr;
function mergeSort(arr) {
if (arr.length <= 1) return arr;
return result.concat(left.slice(leftIndex)).concat(right.slice(rightIndex));
}
Sortowanie przez kopcowanie (Heap Sort): To porównawczy algorytm sortowania, który wykorzystuje strukturę
danych kopca binarnego (binary heap data structure) do tworzenia częściowo posortowanej tablicy, a następnie
stopniowo ją uzupełnia, tworząc w pełni posortowaną tablicę.