Kan ikke læse ejendoms 'split' af udefineret

Hvis du nogensinde har brugt JavaScript s splitmetode, er der en god chance for, at du er stødt på følgende fejl: TypeError: Cannot read property 'split' of undefined.

Der er et par grunde til, at du får denne fejl. Mest sandsynligt er det bare en grundlæggende misforståelse af, hvordan det splitfungerer, og hvordan man gentager sig gennem arrays.

For eksempel, hvis du prøver at indsende følgende kode til Find det længste ord i en strengudfordring:

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");

det vil kaste TypeError: Cannot read property 'split' of undefinedfejlen.

den splitmetode

Når splitder kaldes på en streng, opdeler den strengen i understrenge baseret på den separator, der sendes ind som et argument. Hvis en tom streng sendes som et argument, splitbehandler hvert tegn som en understreng. Det returnerer derefter et array, der indeholder understrengene:

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' ] 

Tjek MDN for at få flere oplysninger om split.

Problemet forklaret med eksempler

At vide, hvad splitmetoden vender tilbage, og hvor mange underlag du kan forvente, er nøglen til at løse denne udfordring.

Lad os tage et kig på koden ovenfor og se, hvorfor det ikke fungerer som forventet:

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"); 

Opdeling stri en matrix som denne ( const array = str.split(" ");) fungerer som forventet og vender tilbage [ 'The',   'quick',   'brown',   'fox',   'jumped',   'over',   'the',   'lazy',   'dog' ].

Men se nærmere på forløkken. I stedet for at bruge længden af arraysom en betingelse til at gentage i, str.lengthbruges i stedet.

strer "Den hurtige brune ræv sprang over den dovne hund", og hvis du logger str.lengthpå konsollen, får du 44.

Den sidste sætning i selve forsløjfen er, hvad der er årsag til fejlen: array[i].split("");. Længden af arrayer 9, så det ivil hurtigt gå langt over den maksimale længde på 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"); 

Opfordring array[i].split("");til at opdele hver streng i understrenge af tegn er en gyldig tilgang, men den kaster, TypeError: Cannot read property 'split' of undefinednår den er bestået undefined.

Sådan løses Find det længste ord i en streng med split

Lad os hurtigt gå igennem nogle pseudokoder for, hvordan du løser dette problem:

  1. Opdel stri en række individuelle ord
  2. Opret en variabel for at spore den største ordlængde
  3. Iterér gennem matrixen af ​​ord og sammenlign længden af ​​hvert ord med variablen nævnt ovenfor
  4. Hvis længden af ​​det aktuelle ord er større end den, der er gemt i variablen, skal du udskifte denne værdi med den aktuelle ordlængde
  5. Når længden af ​​hvert ord er sammenlignet med den maksimale variabel for ordlængde, skal du returnere dette tal fra funktionen

Del først stri en række individuelle ord:

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

Opret en variabel for at holde styr på den længste ordlængde og sæt den til nul:

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

Nu hvor værdien af arrayer ['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog'], kan du bruge array.lengthi din forloop:

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

Iterer gennem matrixen af ​​ord og kontroller længden af ​​hvert ord. Husk at strenge også har en lengthmetode, du kan ringe til for let at få længden af ​​en streng:

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

Brug en ifsætningskontrol, hvis længden af ​​det aktuelle ord ( array[i].length) er større end maxLength. Hvis ja, skal du erstatte værdien af maxLengthmed array[i].length:

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

Til sidst vender du tilbage maxLengthi slutningen af ​​funktionen efter forsløjfen:

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