Przejdź do głównej zawartości

Bug #074

🪲 Znajdź buga

console.log([1, 2, 3] + [4, 5, 6])

Chcemy połączyć (dodać) ze sobą kilka tablic.

Czy powyższy kod spełni to zadanie?\ Co zostanie zalogowane do konsoli?

🧪 Rozwiązanie

console.log([...[1, 2, 3], ...[4, 5, 6]])
// "1,2,34,5,6"

Przykład błędnego kodu nie jest wymyślony przeze mnie. Znalazłem go w kursie JavaScript, który mianował się tytułem "Prawdopodobnie najlepszy darmowy kurs JavaScript".

W sekcji dodawania elementów do tablicy, użycie operatora + było zaproponowane przez autora, jako metoda dodawania do tablicy nowych elementów, lub łączenia ze sobą tablic.

+ jest przeładowanym operatorem dodawania, tzn. ma więcej niż jedną funkcjonalność, która zależy od typów danych, które zostaną podstawione jako operandy.

+ może matematycznie dodawać wartości liczbowe, ale może też łączyć ze sobą ciągi znaków.

W przypadku próby dodania do siebie dwóch tablic, w pierwszej kolejności algorytm operatora + wymusi konwersję tablic do ciągów znaków poprzez wywołanie metody toString().

[1, 2, 3].toString() zwróci ciąg znaków "1,2,3".

Analogicznie dla drugiej tablicy będzie to "4,5,6".

Połączenie tych dwóch ciągów znaków da nam więc ciąg znaków "1,2,34,5,6".

Nie uda się nam odwrócić tej operacji np. poprzez "1,2,34,5,6".split(","), bo nowa tablica otrzyma wtedy zlepiony element "34". Tracimy też informację o oryginalnym typie danych.

Aby połączyć, lub w sposób nienaruszający oryginalną tablicę (push(), patrzę na Ciebie), dodać nowe elementy, najwygodniej będzie użyć operatora rozkładu (spread), rozkładając tablicę wewnątrz nowej tablicy [...[1, 2, 3]].

W ten sposób możemy łączyć dowolną ilość tablic i dodawać do nich dowolną ilość nowych elementów.

Innym sposobem może być użycie np. Array.prototype.concat().

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js