Die Eigenschaft 'split' von Undefined kann nicht gelesen werden

Wenn Sie jemals die JavaScript- splitMethode verwendet haben, besteht eine gute Chance, dass der folgende Fehler aufgetreten ist : TypeError: Cannot read property 'split' of undefined.

Es gibt einige Gründe, warum Sie diesen Fehler erhalten würden. Höchstwahrscheinlich ist es nur ein grundlegendes Missverständnis darüber, wie es splitfunktioniert und wie Arrays durchlaufen werden.

Wenn Sie beispielsweise versuchen, den folgenden Code für die Herausforderung "Das längste Wort in einer Zeichenfolge suchen" zu senden:

function findLongestWord(str) { for(let i = 0; i < str.length; i++) { const array = str.split(" "); array[i].split(""); } } findLongestWord("The quick brown fox jumped over the lazy dog");

es wird den TypeError: Cannot read property 'split' of undefinedFehler werfen .

Die splitMethode

Wenn spliteine Zeichenfolge aufgerufen wird, wird die Zeichenfolge basierend auf dem als Argument übergebenen Trennzeichen in Teilzeichenfolgen aufgeteilt. Wenn eine leere Zeichenfolge als Argument übergeben wird, wird splitjedes Zeichen als Teilzeichenfolge behandelt. Anschließend wird ein Array zurückgegeben, das die Teilzeichenfolgen enthält:

const testStr1 = "Test test 1 2"; const testStr2 = "cupcake pancake"; const testStr3 = "First,Second,Third"; testStr1.split(" "); // [ 'Test', 'test', '1', '2' ] testStr2.split(""); // [ 'c', 'u', 'p', 'c', 'a', 'k', 'e', ' ', 'p', 'a', 'n', 'c', 'a', 'k', 'e' ] testStr3.split(","); // [ 'First', 'Second', 'Third' ] 

Weitere Informationen finden Sie unter MDN split.

Das Problem wurde anhand von Beispielen erklärt

Zu wissen, was die splitMethode zurückgibt und wie viele Teilzeichenfolgen Sie erwarten können, ist der Schlüssel zur Lösung dieser Herausforderung.

Schauen wir uns den obigen Code noch einmal an und sehen, warum er nicht wie erwartet funktioniert:

function findLongestWord(str) { for(let i = 0; i < str.length; i++) { const array = str.split(" "); array[i].split(""); } } findLongestWord("The quick brown fox jumped over the lazy dog"); 

Das Aufteilen strin ein Array wie dieses ( const array = str.split(" ");) funktioniert wie erwartet und kehrt zurück [ 'The',   'quick',   'brown',   'fox',   'jumped',   'over',   'the',   'lazy',   'dog' ].

Aber schauen Sie sich die forSchleife genauer an . Anstatt die Länge von arrayals Bedingung für die Iteration zu verwenden i, str.lengthwird stattdessen verwendet.

strist "Der schnelle braune Fuchs ist über den faulen Hund gesprungen", und wenn Sie sich str.lengthan der Konsole anmelden , erhalten Sie 44.

Die letzte Anweisung im Hauptteil der forSchleife verursacht den Fehler : array[i].split("");. Die Länge von arrayist 9, iwürde also schnell weit über die maximale Länge von gehen array:

function findLongestWord(str) { for(let i = 0; i < str.length; i++) { const array = str.split(" "); console.log(array[i]); // array[0]: "The" // array[1]: "quick" // array[2]: "brown" // ... // array[9]: "dog" // array[10]: undefined // array[11]: undefined } } findLongestWord("The quick brown fox jumped over the lazy dog"); 

Das Aufrufen array[i].split("");, um jede Zeichenfolge in Teilzeichenfolgen von Zeichen aufzuteilen, ist ein gültiger Ansatz, der jedoch ausgelöst wird, TypeError: Cannot read property 'split' of undefinedwenn er übergeben wird undefined.

So lösen Sie Finden Sie das längste Wort in einer Zeichenfolge mit split

Lassen Sie uns kurz einen Pseudocode durchgehen, um dieses Problem zu lösen:

  1. Aufgeteilt strin eine Anordnung von einzelnen Wörtern
  2. Erstellen Sie eine Variable, um die größte Wortlänge zu verfolgen
  3. Durchlaufen Sie das Array von Wörtern und vergleichen Sie die Länge jedes Wortes mit der oben genannten Variablen
  4. Wenn die Länge des aktuellen Wortes größer ist als die in der Variablen gespeicherte, ersetzen Sie diesen Wert durch die aktuelle Wortlänge
  5. Wenn die Länge jedes Wortes mit der maximalen Wortlängenvariablen verglichen wurde, geben Sie diese Zahl von der Funktion zurück

Teilen Sie zunächst streine Reihe einzelner Wörter auf:

function findLongestWordLength(str) { const array = str.split(" "); }

Erstellen Sie eine Variable, um die längste Wortlänge zu verfolgen, und setzen Sie sie auf Null:

function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; }

Jetzt, da der Wert von arrayist ['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog'], können Sie array.lengthin Ihrer forSchleife Folgendes verwenden:

function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; for (let i = 0; i < array.length; i++) { } }

Durchlaufen Sie die Wortreihe und überprüfen Sie die Länge jedes Wortes. Denken lengthSie daran, dass Zeichenfolgen auch eine Methode haben, die Sie aufrufen können, um die Länge einer Zeichenfolge einfach zu ermitteln:

function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i < array.length; i++) { array[i].length; } }

Verwenden Sie eine ifAnweisungsprüfung, wenn die Länge des aktuellen Wortes ( array[i].length) größer als ist maxLength. Wenn ja, ersetzen Sie den Wert von maxLengthdurch array[i].length:

function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i  maxLength) { maxLength = array[i].length; } } }

Kehren Sie schließlich maxLengtham Ende der Funktion nach der forSchleife zurück:

function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i  maxLength) { maxLength = array[i].length; } } return maxLength; }