chmura tagów z wykorzystaniem czystego javascriptu

0

Cześć, uczę się javascriptu z kursu, podstawy podstaw już opanowałem, ale mam problem z jednym zadaniem. Podchodzę już do tego kilkanaście razy i nie mogę sobie z tym poradzić: Na podstawie tablicy elementów muszę stworzyć chmurę tagów, czyli taką listę wszystkich słów występujących w tablicy. W zależności od częstotliwości występowania danego słowa muszę to ostylować.

Otrzymałem taką wskazówkę, żeby iterować swoją tablicę i każdego słowa tworzyć nową tablicę sprawdzając przy tym czy dane słowo nie wystąpiło wcześniej. Jeżeli słowo pojawiło się wcześniej, to wrzucić je do tej tablicy. Na koniec policzyć ilość elementów w każdej z tablic i na tej podstawie ustalić częstotliwość występowania słowa w bazie. Mam z tym problem, czy mogę prosić osobę bardziej zaawansowaną o wskazówki? A może rozwiązać ten problem w inny sposób?

Pozdrawiam

0

Idziesz w dobrą stronę. Nie musisz tworzyć dodatkowej tablicy. Spróbuj wykorzystać obiekt do przechowania informacji. Obiekty w JS wyglądają tak:

const obj = {
  key: value
};

Zrób pętlę po twoich tagach i wrzucaj je do obiektu. Pod kluczem trzymaj tag, a pod value liczbę wystapień, żeby uzyskać coś takiego:

const occurrences = {
  "TDD": 10,
  "JavaScript:" 2,
  "PHP": 5,
  "Java": 1
}

Później zrób pętlę po kluczach obiektu (Object.keys(obj)) i utwórz z nich HTML. Każdemu elementowi HTML możesz nadawać font-size na przykład zgodnie z regułą 5 + occurrences, gdzie 5, to najmniejsza możliwa czcionka, dla 1 wystąpienia.

0

właśnie przeglądałem już różne strony i doszedłem do wniosku, że za pomocą obiektów byłoby szybciej, ale niestety nie mogę z nich korzystać. W zadaniach mogę wykorzystywać tylko metody, które do tej pory zostały omówione, a obiektów jeszcze nie ruszałem, muszę wykorzystać tablice ;(

1

Ahh ten uczelniany bullshit. W takim razie:

Zakładając, że Twoja tablica wejściowa wygląda w ten sposób:

const words = ['foo', 'bar', 'foo', 'foo', 'bar', 'baz'];

Po policzeniu słów powinna Ci powstać taka tablica:

const groupedWords = [
    ['foo', 'foo', 'foo'],
    ['bar', 'bar'],
    ['baz']
];

Podczas iterowania po words musisz wiedzieć na jakim indeksie tablicy groupedWords znajduje się Twoje słowo. Na przykład załóżmy, że znajdujesz słowo bar. Chcesz je dodać do groupedWords. Musisz teraz jakoś wymyślić na jakim indeksie znajdują się słowa z tej grupy. W tym wypadku będzie to indeks 1. Do tego celu napisz sobie funkcję, która znajdzie Ci w tablicy dwuwymiarowej twoje słowo i zwróci Ci odpowiedni indeks:

function findWord(word, words) {
  
    return 0; // tutaj zwróć indeks.
}

const groupedWords = [
    ['foo', 'foo', 'foo'],
    ['bar', 'bar'],
    ['baz']
];

const index = findWord('bar', groupedWords); // powinno zwrócić dla foo -> 0, dla bar -> 1, dla baz -> 2

Później już robisz tylko:

groupedWords[index].push(word);

Jak już przerobisz tablicę words => groupedWords, to robisz pętle po tablicy groupedWords i używasz długości podtablic do pobrania ilości wystąpień i pierwszego elementu z podtablicy do wyświetlenia słowa.

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