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

question-closed Sprawdznie string.charAt() daje zawsze null

0 głosów
100 wizyt
pytanie zadane 13 grudnia 2018 w JavaScript przez gnu_ewm Gaduła (3,340 p.)
zamknięte 31 maja 2020 przez gnu_ewm

Witam. Tworzę program w JavaScript który na podać ilość zdań, liter, słów oraz całą długość.

var letters;
var words;
var phrases;
var text;
var textLength;
var lastToken = "";

function process()
{
  text = document.getElementById("inputText").value;
  textLength = text.length;
  for(i = 0; i <= text.length; i++)
  {
    if(text.charAt(i) == " " && lastToken != " ") words++;
    else if(text.charAt(i) == "." || text.charAt(i) == "!" || text.charAt(i) == "?" && lastToken != "." && lastToken != "!" && lastToken != "?") phrases++;
    else letters++;

    lastToken = text.charAt(i);
  }

  document.getElementById("processResoult").innerHTML = "Litery: " + letters + " Wyrazy: " + words + " Zdania: " + phrases + " Długość: " + textLength;
}
<!DOCTYPE html>
<html lang="pl">
  <head>
    <meta charset="utf-8">
    <title>Słowa</title>
    <link rel="stylesheet" href="style.css">
    <link href="https://fonts.googleapis.com/css?family=Ubuntu:500&amp;subset=latin-ext" rel="stylesheet">
  </head>
  <body>
    <div id="inputs">
      <input id="inputText" type="text" placeholder="Tekst">
      <input id="processButton" type="button" value="Process" onclick="process()">
    </div>
    <div id="processResoult"></div>

    <script src="scripts.js"></script>
  </body>
</html>

Tylko sprawdzanie ilości liter daje poprawny wynik, inne dają wartość null lub undifined. Przeglądarka to Firefox, a system to Ubuntu.

komentarz zamknięcia: Zimny pot mnie zalewa kiedy czytam moje stare pytania.

1 odpowiedź

+1 głos
odpowiedź 13 grudnia 2018 przez Kamil Naja Nałogowiec (26,480 p.)

Moim zdaniem błąd polega na tym, że robisz if -else zamiast kilku osobnych ifów. Wykonuje się pierwszy warunek a reszta jest omijana. Możesz to łatwo sprawdzić w debuggerze. Nie podoba mi się omijanie nawiasów {} przy ifach, dodatkowo zmniejsza to czytelność.

Kod funkcji jest bardzo zawikłany, rozbij go na kilka osobnych funkcji i je wywołuj.

Np sprawdzanie ilości słów

function returnWordsCount(data) {
    return data
        .split(' ')
        .map(item => item[0])
        .length;
}

 

1
komentarz 13 grudnia 2018 przez gnu_ewm Gaduła (3,340 p.)
Problem został rozwiązany przez przypisanie wartości 0 zmiennych words i phrases przy ich definiowaniu. Dziękuję za pomoc i  cenne wskazówki.
komentarz 13 grudnia 2018 przez Chess Maniak (74,770 p.)

Po co Ci zmienna textLength skoro się do niej nie odwołujesz, tylko znowu wpisujesz to co wcześniej.

for(i = 0; i <= text.length; i++)

Zamiast tej powyższej linii, powinna być raczej ta:

for(i = 0; i <= textLength; i++)

No chyba, że taki miałeś celowy zamiar.

Podobne pytania

+1 głos
3 odpowiedzi 106 wizyt
pytanie zadane 17 czerwca w SQL, bazy danych przez manjaro Nałogowiec (34,940 p.)
0 głosów
1 odpowiedź 107 wizyt
pytanie zadane 20 października 2018 w PHP przez Bartłomiej Bolesta Obywatel (1,610 p.)
0 głosów
2 odpowiedzi 1,276 wizyt
pytanie zadane 3 stycznia 2018 w JavaScript przez kevin Mądrala (5,010 p.)
Porady nie od parady
Forum posiada swój własny serwer Discord, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

85,253 zapytań

134,061 odpowiedzi

297,272 komentarzy

56,338 pasjonatów

Motyw:

Akcja Pajacyk

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

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

...