Ne može se pročitati svojstvo 'split' od Nedefinirano

Ako ste ikada koristili JavaScript je splitmetoda, postoji dobra šansa da ste naišli na sljedeću pogrešku: TypeError: Cannot read property 'split' of undefined.

Postoji nekoliko razloga zašto biste dobili ovu pogrešku. Najvjerojatnije je to samo osnovno nerazumijevanje načina splitrada i načina iteracije kroz nizove.

Na primjer, ako pokušate poslati sljedeći kôd za izazov Pronađi najdužu riječ u nizu:

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

bacit će TypeError: Cannot read property 'split' of undefinedpogrešku.

splitmetoda

Kada splitse pozove na niz, on dijeli niz na podnizove na temelju separatora predanog kao argument. Ako se prazan niz preda kao argument, splitsvaki znak tretira kao podniz. Zatim vraća niz koji sadrži podnizove:

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

Pogledajte MDN za više detalja o split.

Problem objašnjen primjerima

Znanje što splitmetoda vraća i koliko podnizova možete očekivati ​​ključno je za rješavanje ovog izazova.

Pogledajmo još jedan kôd gore i vidjet ćemo zašto ne radi kako se očekivalo:

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

Dijeljenje stru niz poput ovog ( const array = str.split(" ");) radi prema očekivanjima i vraća se [ 'The',   'quick',   'brown',   'fox',   'jumped',   'over',   'the',   'lazy',   'dog' ].

Ali pažljivo pogledajte forpetlju. Umjesto da koristi dužinu arraykao uvjet za ponavljanje i, str.lengthumjesto toga koristi se.

strje "Brza smeđa lisica preskočila lijenog psa", a ako se prijavite str.lengthna konzolu, dobit ćete 44.

Posljednja izjava u tijelu forpetlje je ono što je uzrok pogreške: array[i].split("");. Duljina arrayje 9, pa ibi brzo prešla maksimalnu dužinu od 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"); 

Poziv array[i].split("");da se svaki niz podijeli na podnizove znakova valjan je pristup, ali bacit će se TypeError: Cannot read property 'split' of undefinedkad prođe undefined.

Kako riješiti pomoću programa Pronađi najdužu riječ u nizu split

Idemo brzo potražiti neki pseudo kôd kako bismo riješili ovaj problem:

  1. Podijelite stru niz pojedinačnih riječi
  2. Stvorite varijablu za praćenje najveće duljine riječi
  3. Prelistajte niz riječi i usporedite duljinu svake riječi s gore spomenutom varijablom
  4. Ako je duljina trenutne riječi veća od dužine pohranjene u varijabli, tu vrijednost zamijenite trenutnom duljinom riječi
  5. Nakon što se duljina svake riječi usporedi s varijablom maksimalne duljine riječi, vratite taj broj iz funkcije

Prvo se podijelite stru niz pojedinačnih riječi:

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

Stvorite varijablu da biste pratili najdužu duljinu riječi i postavite je na nulu:

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

Sada kada vrijednost arrayje ['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog'], možete array.lengthu svojoj forpetlji upotrijebiti :

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

Prelistajte niz riječi i provjerite duljinu svake riječi. Imajte na umu da nizovi također imaju lengthmetodu koju možete pozvati da biste lako dobili duljinu niza:

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

Koristite ifprovjeru izraza ako je duljina trenutne riječi ( array[i].length) veća od maxLength. Ako je tako, zamijenite vrijednost maxLengthsa array[i].length:

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

Na kraju, vratite se maxLengthna kraju funkcije, nakon forpetlje:

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