• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablica ze zmianą elementów

0 głosów
64 wizyt
pytanie zadane 2 marca w JavaScript przez Monsterek Nowicjusz (120 p.)
Totalnie nie wiem od czego zacząć. Mam stworzyć tablicę z 5 elementów, w której każdą literę C zamienię na 4, każdą literę E na 8. Następnie z każdego elementu, który ma więcej niż 4 litery, muszę usunąć środek, żeby zostały tylko 2 pierwsze i 2 ostatnie litery, a na ich miejsce wstawić 3 przecinki. np. młoteczek -> mł,,,8k.. Ktoś jest w stanie wyjaśnić z jakich metod mogę skorzystać?

2 odpowiedzi

+1 głos
odpowiedź 2 marca przez pablop76 VIP (119,580 p.)

Wszystkie potrzebne metody znajdziesz tu. Ne pewno sposobów jest wiele. 

1.Zamień tekst na tablicę.

2. Wyszukaj w pętli o długości tablicy lub tekstu wystąpienia "c" oraz "e" (uwzględnij wielkość liter) i zamień na cyfry.

3. Sprawdź czy tablica lub tekst jest dłuższy niż 4 i jeżeli tak to pobierz dwa pierwsze znaki oraz dwa ostatnie do nowych tablic.

4. Połącz nowe tablice z tablicą [",,,"] i zamień na tekst

+1 głos
odpowiedź 2 marca przez Comandeer Guru (568,880 p.)

Rozumiem, że to ma być tablica zawierająca ciągi tekstowe?

Jeśli tak, to bym zrobił przy pomocy Array#map() + String#replace() i String#slice():

  1. Wsadzasz tablicę do Array#map().
  2. W callbacku najpierw podmieniasz litery przy pomocy String#replace() (pamiętaj, że musisz skorzystać z wyrażenia regularnego z flagą g, np. dla litery "c" byłoby to /c/g; alternatywnie możesz użyć String#replaceAll()).
  3. Następnie sprawdzasz, czy czy ciąg ma więcej niż 4 litery, i go kroisz przy pomocy String#slice(). Musisz "ukroić" dwa kawałki – jeden z początku (od indeksu 0 do 1) i drugi z końca (tutaj wystarczy do String#slice() podać -2). Liczysz sobie, ile jest pozostałych liter (czyli długość ciągu - 4) i tyle przecinków wstawiasz między ukrojone fragmenty. Alternatywnie możesz spróbować to zrobić przy pomocy wyrażeń regularnych, ale będzie zdecydowanie więcej zabawy z tym.
  4. Zwracasz sobie tak przerobiony ciąg.
  5. Pamiętaj, żeby zapisać gdzieś wynik Array#map(), bo to zwraca nową tablicę, nie modyfikuje oryginalnej.
komentarz 2 marca przez mokrowski VIP (148,220 p.)

@Commander,

Hmm... nie spodziewałem się że dla takiego problemu, warto wyciągać "armatę wyrażeń regularnych" :) No ale to dylemat szybko czy wygodnie .. i oba dla kogo :)

komentarz 2 marca przez Comandeer Guru (568,880 p.)

Można też spróbować to zrobić przy pomocy zamiany na tablicę, jak proponował @pablop76, albo skorzystać ze String#replaceAll(), o czym wspominałem w swojej odpowiedzi.

1
komentarz 2 marca przez mokrowski VIP (148,220 p.)
Spoko. Ja zrozumiałem. Tylko pytający nie wie "jak wejść na parter" a mówisz mu (zresztą poprawnie) że "fajniej jest na trzecim piętrze" jeśli chodzi o poziom abstrakcji :)

BTW, tak naprawdę większość z tych operacji można zrobić regexp. Nawet "wycinanie środka". Tylko ... rozwiązując problem poprzez regex... a zresztą.. tu zbliżone do moich doświadczeń: https://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/

Dobra .. nie marudzę :)
komentarz 2 marca przez VBService Mędrzec (171,990 p.)

@Comandeer;

 

  1. Wsadzasz tablicę do Array#map().
  2. W callbacku najpierw podmieniasz litery przy pomocy String#replace() (pamiętaj, że musisz skorzystać z wyrażenia regularnego z flagą g, np. dla litery "c" byłoby to /c/g; alternatywnie możesz użyć String#replaceAll()).
  3. Następnie sprawdzasz, czy czy ciąg ma więcej niż 4 litery, i go kroisz przy pomocy String#slice(). Musisz "ukroić" dwa kawałki – jeden z początku (od indeksu 0 do 1) i drugi z końca (tutaj wystarczy do String#slice() podać -2). Liczysz sobie, ile jest pozostałych liter (czyli długość ciągu - 4) i tyle przecinków wstawiasz między ukrojone fragmenty. Alternatywnie możesz spróbować to zrobić przy pomocy wyrażeń regularnych, ale będzie zdecydowanie więcej zabawy z tym.
  4. Zwracasz sobie tak przerobiony ciąg.
  5. Pamiętaj, żeby zapisać gdzieś wynik Array#map(), bo to zwraca nową tablicę, nie modyfikuje oryginalnej.

Moim zdaniem zamieniłbym miejscami punkt 2 na 3, najpierw "pociął" i wstawił przecinki i dopiero dokonał zamiany liter na tym "co zostanie".  smiley

komentarz 2 marca przez Comandeer Guru (568,880 p.)
W sumie wyjdzie na to samo, to fakt. Po prostu rozpisałem to zgodnie z tym, co było w pytaniu.
komentarz 2 marca przez VBService Mędrzec (171,990 p.)

Nie mówię, że coś jest źle, ale po co zmieniać litery, które za "chwilę" będą "przecinkami", może przy 5 elementowej tablicy to nie ma znaczenia, ale dobrze żeby @Monsterek; miał to na uwadze ucząc się "programowania". smiley

Podobne pytania

0 głosów
1 odpowiedź 352 wizyt
pytanie zadane 4 grudnia 2016 w C i C++ przez Akiro Bywalec (2,910 p.)
+2 głosów
1 odpowiedź 126 wizyt
pytanie zadane 10 marca 2021 w JavaScript przez Kalindoreks Użytkownik (620 p.)
+1 głos
1 odpowiedź 99 wizyt

88,328 zapytań

136,921 odpowiedzi

305,575 komentarzy

58,600 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...