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

Tablica ze zmianą elementów

Object Storage Arubacloud
0 głosów
138 wizyt
pytanie zadane 2 marca 2022 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 2022 przez pablop76 VIP (123,120 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 2022 przez Comandeer Guru (600,710 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 2022 przez mokrowski Mędrzec (155,460 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 2022 przez Comandeer Guru (600,710 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 2022 przez mokrowski Mędrzec (155,460 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 2022 przez VBService Ekspert (252,660 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 2022 przez Comandeer Guru (600,710 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 2022 przez VBService Ekspert (252,660 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ź 754 wizyt
pytanie zadane 4 grudnia 2016 w C i C++ przez Akiro Bywalec (2,910 p.)
+2 głosów
1 odpowiedź 333 wizyt
pytanie zadane 10 marca 2021 w JavaScript przez Kalindoreks Użytkownik (620 p.)
+1 głos
1 odpowiedź 419 wizyt

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...